0
크기가 20 인 배열을 유지하기에 충분한 메모리 공간이 있다고 가정 해보십시오. 프로그램이 실행 중이고 크기가 40 인 배열에 대해 충분한 메모리가 필요합니다. realloc을 사용하여이 작업을 시도했지만 작동하지 않는 것 같습니다. . realloc을 실패하는 이유배열 크기에 따라 재 할당하는 방법은 무엇입니까?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv){
int i,sum,size;
int *fibo;
size = 20; //initial size of array
fibo = (int *) malloc(size*sizeof(int));
fibo[0]=1;
fibo[1]=1;
i=2;
sum=0;
while(fibo[i-1]<4000000){
fibo[i] = fibo[i-1]+fibo[i-2];
printf("fibo[%d] = %d\n", i, fibo[i]);
if(fibo[i]%2 == 0){
sum+= fibo[i];
}
i++;
if(i>size){
fibo = (int *) realloc(fibo, (size *= 2)*sizeof(int));
}
}
printf("Sum = %d\n", sum);
return 0;
}
누구나 알고 있으며, 나는 그것을 고칠 수있는 방법 : 내 코드는 (내가 4million 아래 모든 짝수 값 피보나치 용어의 합을 찾기 위해 노력하고) 다음입니까? 마지막 반복하는 동안
을 :) 해결해야합니까? 어떤 증상이 보이나요? – psmears
4 백만이 넘기 전에 약 23 개의 피보나치 조건에 도달 할 것입니다. 내가 처음부터 적절하게 할당한다면, 프로 그램은 정상적으로 작동합니다. realloc을 사용하면 20에 도달하고 더 이상 정수를 fibo 배열에 추가하지 못합니다. 즉 프로그램이 작동을 멈춘다. – modsoussi
(주의 : "if (i> size)"보다는 "if (i> = size)"를 원할 것입니다 - 그렇지 않으면 배열 끝에 방금 작성한 realloc을 할 때 ...) – psmears