메모리 동적 할당 관련해서 질문 있습니다~
게자리
질문 제목 : 메모리 동적 할당 관련해서 질문 있습니다~질문 요약 :메모리 동적 할당할 때 예를 들면 배열의 길이를 무한하게 할 수 있나요?질문 내용 :
사용자로부터 정수를 입력 받는데 -1이 입력되면 프로그램이 종료되면서 그동안 입력 받은 정수가 출력 됩니다.
처음엔 길이 5짜리 배열에 받다가 그 이상이 되면 3씩 커지는 배열을 생성해서 계속 이어나가는 형식인데
정수를 16개인가 입력하면 갑자기 오류 메시지가 나오면서 종료되는데요
메모리 동적 할당을 이용하면 -1을 입력할 때 까지 무한히 배열이 커져야 하는것 아닌가요??
아래 코드는 제가 짠 코드인데요 뭐가 문제일까요..(아직 실력이 좋지 않아 코드가 쓸데없이 복잡하네요 ㅠㅠ)
#include stdio.h
#include stdlib.h
int main(void)
{
int arr[5]; //최초 배열
int i, j, count=0, input, a=0, b=0;
int *parr1, *parr2; // 길이가 5이상이 되었을 때 동적 할당으로 정수를 받아줄 배열들..
for(i=0; i5; i++) //최초 길이 5이하의 정수 입력받을 때
{
printf(number ? : );
scanf(%d, &input);
arr[i]=input;
if(arr[i]==-1) // -1 입력 되면 프로그램 종료되면서 그동안 입력한 정수 출력
{
for(i=0; icount; i++)
printf(%d, , arr[i]);
break;
}
count++;
}
if(count==5) // count=5가 되었을 때
{
parr1=(int*)malloc(8*sizeof(int)); //길이 8인 배열 생성
for(i=0; i5; i++)
parr1[i]=arr[i];
for(i=5; i8; i++) //배열의 6,7,8번 요소 입력 받기
{
printf(number ? : );
scanf(%d, &parr1[i]);
if(parr1[i]==-1) // -1 입력시 종료
{
for(i=0; icount; i++)
printf(%d, , parr1[i]);
break;
}
count++;
}
}
if(count=8) // count가 8이상일 때
{
for(j=1; ; j++) // 배열의 동적 메모리 할당을 위한 변수 j를 이용한 반복
{
if(count%2==0) // count가 8, 14, 20, ~~~
{
parr2=(int*)malloc(8*sizeof(int)+(3*j)*sizeof(int));
for(i=0; icount; i++)
{
parr2[i]=parr1[i];
}
free(parr1);
for(i=count; icount+(3*j); i++)
{
printf(number ? : );
scanf(%d, &input);
parr2[i]=input;
if(parr2[i]==-1)
{
for(i=0; icount+a; i++)
printf(%d, , parr2[i]);
break;
}
a++;
}
a=0;
}
else // count가 11, 17, ~~~
{
parr1=(int*)malloc(8*sizeof(int)+(3*j)*sizeof(int));
for(i=0; icount; i++)
{
parr1[i]=parr2[i];
}
free(parr2);
for(i=count; icount+(3*j); i++)
{
printf(number ? : );
scanf(%d, &input);
parr1[i]=input;
if(parr1[i]==-1)
{
for(i=0; icount+b; i++)
printf(%d, , parr1[i]);
break;
}
b++;
}
b=0;
}
if(input==-1)
break;
count+=3;
}
}
return 0;
}