본문 바로가기

C\C++

malloc, realloc 예제

개요

malloc과 realloc을 사용하여 메모리를 동적 선언하는 코드작성.

Code

#include<stdio.h>
#include<stdlib.h>

#define U_SIZEOF (unsigned)sizeof

int iSum(int* ptr, int size);
void in_num(int* ptr);
void ptrError(int* ptr);

int main(void)
{
	int* iPtr = NULL;
	in_num(iPtr);
	free(iPtr);
	return 0;
}

void in_num(int* ptr)
{
	int iNum, iAddNum;
	do {
		printf("몇개의 숫자를 입력하겠습니까? (0:종료) : ");
		scanf_s("%d", &iNum);
		if (iNum < 0) {
			printf("값이 0보다 작습니다.\n");
			iNum = 0;
		}
		else {
			ptr = (int*)malloc(U_SIZEOF(int) * iNum);
			ptrError(ptr);
			for (int i = 0; i < iNum; i++) {
				printf("%2d번째 값은 : ", i+1);
				scanf_s("%d", &ptr[i]);
			}
		}
		printf("추가로 몇 개를 더 입력하시겠습니까 ? (0:종료) : ");
		scanf_s("%d", &iAddNum);
		if (iAddNum < 0) {
			printf("값이 0보다 작습니다.\n");
			iAddNum = 0;
		}
		else {
			ptr = (int*)realloc(ptr, U_SIZEOF(int) * (iNum + iAddNum));
			ptrError(ptr);
			for (int i = iNum; i < iNum + iAddNum; i++) {
				printf("%2d번째 값은 : ", i+1);
				scanf_s("%d", &ptr[i]);
			}
		}
		if (!(iNum == 0) || !(iAddNum == 0)) {
			printf("합계는 %d입니다.\n", iSum(ptr, iNum + iAddNum));
		}
	} while (iNum && iAddNum);
}

int iSum(int* ptr,int size)
{
	int sum = 0;
	for (int i = 0; i < size; i++) {
		sum += ptr[i];
	}
	return sum;
}

void ptrError(int* ptr)
{
	if (ptr = NULL) {
	printf("메모리를 할당하지 못했습니다.");
	}
}

Output

'C\C++' 카테고리의 다른 글

도서관리 프로젝트  (0) 2022.03.16
Linked List 회원관리 프로그램  (0) 2022.03.04
포인터 문제  (0) 2022.03.02
배열 문제  (0) 2022.03.02
구조체 문제  (0) 2022.03.02