C 언어 메모리 재할당 realloc() 함수, 초기화 함수 memset() 함수
입력받는 count 변수의 크기가 이전 count보다 값이 크면 배열의 메모리를
count 변수의 크기로 재할당하는 방식의 코드
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int count = 0;
int previousCnt = -1000000000;
int* dynamicIntegerArray = NULL;
int* reallocArray = NULL;
int temp = 0;
do
{
printf("원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?");
scanf("%u", &count);
if(count > 0)
{
if(count > previousCnt)
{
if( NULL == dynamicIntegerArray )
{
dynamicIntegerArray = (int*) malloc(sizeof(int)*count);
memset(dynamicIntegerArray, 0 , sizeof(int) * count);
for(int i = 0; i< count; i++)
{
printf("%d 번째 원소의 값은 ? ",i);
scanf("%u", &temp);
dynamicIntegerArray[i] = temp;
}
for(int i = 0; i< count; i++)
{
printf("[%d] %d\n",i,dynamicIntegerArray[i]);
}
}
else
{
reallocArray = (int*) realloc(dynamicIntegerArray, sizeof(int) * count);
if(NULL != reallocArray)
{
dynamicIntegerArray = reallocArray;
}
for(int i =0; i< count; i++)
{
printf("%d 번째 원소의 값은 ? ",i);
scanf("%u", &temp);
dynamicIntegerArray[i] = temp;
}
for(int i = 0; i< count; i++)
{
printf("[%d] %d\n", i, dynamicIntegerArray[i]);
}
}
previousCnt = count;
}
else
{
printf("%d보다 커야 합니다.\n", previousCnt);
}
}
}while(count > 0 );
if ( NULL != dynamicIntegerArray ) free(dynamicIntegerArray);
return 0;
}
실행시 :
ndgndg91@LAPTOP-CCFK7MKV:~$ ./practice5
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?3
0 번째 원소의 값은 ? 1
1 번째 원소의 값은 ? 2
2 번째 원소의 값은 ? 3
[0] 1
[1] 2
[2] 3
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?2
3보다 커야 합니다.
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?5
0 번째 원소의 값은 ? 1
1 번째 원소의 값은 ? 2
2 번째 원소의 값은 ? 3
3 번째 원소의 값은 ? 4
4 번째 원소의 값은 ? 5
[0] 1
[1] 2
[2] 3
[3] 4
[4] 5
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?0
count 변수의 크기로 재할당하는 방식의 코드
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int count = 0;
int previousCnt = -1000000000;
int* dynamicIntegerArray = NULL;
int* reallocArray = NULL;
int temp = 0;
do
{
printf("원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?");
scanf("%u", &count);
if(count > 0)
{
if(count > previousCnt)
{
if( NULL == dynamicIntegerArray )
{
dynamicIntegerArray = (int*) malloc(sizeof(int)*count);
memset(dynamicIntegerArray, 0 , sizeof(int) * count);
for(int i = 0; i< count; i++)
{
printf("%d 번째 원소의 값은 ? ",i);
scanf("%u", &temp);
dynamicIntegerArray[i] = temp;
}
for(int i = 0; i< count; i++)
{
printf("[%d] %d\n",i,dynamicIntegerArray[i]);
}
}
else
{
reallocArray = (int*) realloc(dynamicIntegerArray, sizeof(int) * count);
if(NULL != reallocArray)
{
dynamicIntegerArray = reallocArray;
}
for(int i =0; i< count; i++)
{
printf("%d 번째 원소의 값은 ? ",i);
scanf("%u", &temp);
dynamicIntegerArray[i] = temp;
}
for(int i = 0; i< count; i++)
{
printf("[%d] %d\n", i, dynamicIntegerArray[i]);
}
}
previousCnt = count;
}
else
{
printf("%d보다 커야 합니다.\n", previousCnt);
}
}
}while(count > 0 );
if ( NULL != dynamicIntegerArray ) free(dynamicIntegerArray);
return 0;
}
실행시 :
ndgndg91@LAPTOP-CCFK7MKV:~$ ./practice5
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?3
0 번째 원소의 값은 ? 1
1 번째 원소의 값은 ? 2
2 번째 원소의 값은 ? 3
[0] 1
[1] 2
[2] 3
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?2
3보다 커야 합니다.
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?5
0 번째 원소의 값은 ? 1
1 번째 원소의 값은 ? 2
2 번째 원소의 값은 ? 3
3 번째 원소의 값은 ? 4
4 번째 원소의 값은 ? 5
[0] 1
[1] 2
[2] 3
[3] 4
[4] 5
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?0
댓글
댓글 쓰기