개요
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