假设malloc有足够的内存空间来容纳一个大小为20的数组。程序正在运行,现在我需要足够的内存来处理大小为40的数组。我尝试使用realloc这样做,但它似乎没有工作。我的代码是以下(我试图找到低于400万的所有偶数斐波纳契项的总和):
#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;
}
任何人都知道为什么realloc失败了,我该如何修复它?
答案 0 :(得分:2)
在最后一次迭代中,i等于20但表达式
if(i>size)
是假的,所以你实际上并没有使用realloc,而是写入
fibo[20]
程序正在访问不属于它的部分内存。将表达式更改为
if(i>=size)
应该解决它:)