2015-01-26 4 views
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 아래 모든 짝수 값 피보나치 용어의 합을 찾기 위해 노력하고) 다음입니까? 마지막 반복하는 동안

+2

을 :) 해결해야합니까? 어떤 증상이 보이나요? – psmears

+0

4 백만이 넘기 전에 약 23 개의 피보나치 조건에 도달 할 것입니다. 내가 처음부터 적절하게 할당한다면, 프로 그램은 정상적으로 작동합니다. realloc을 사용하면 20에 도달하고 더 이상 정수를 fibo 배열에 추가하지 못합니다. 즉 프로그램이 작동을 멈춘다. – modsoussi

+1

(주의 : "if (i> size)"보다는 "if (i> = size)"를 원할 것입니다 - 그렇지 않으면 배열 끝에 방금 작성한 realloc을 할 때 ...) – psmears

답변

2

, 내가 20 만

if(i>size) 

이 거짓 표현을 동일, 그래서 당신은 실제로의 일부에 액세스하는 다음

fibo[20] 

프로그램으로 작성하여, realloc을 사용하지 마십시오 그것에 속하지 않는 메모리.

if(i>=size) 

의 표현을 변경하면 그것은 (오히려 다른 것보다) 실패되는`realloc`이라고 생각하는 당신을 리드 무엇

관련 문제