如何根据数组的大小重新分配?
How to realloc based on size of array?
假设你 malloc 足够的内存 space 来容纳一个大小为 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 会失败,我该如何修复它?
在最后一次迭代中,i 等于 20 但表达式
if(i>size)
为false,所以你实际上并没有使用realloc,那么通过写入
fibo[20]
程序正在访问不属于它的部分内存。将表达式更改为
if(i>=size)
应该修复它:)
假设你 malloc 足够的内存 space 来容纳一个大小为 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 会失败,我该如何修复它?
在最后一次迭代中,i 等于 20 但表达式
if(i>size)
为false,所以你实际上并没有使用realloc,那么通过写入
fibo[20]
程序正在访问不属于它的部分内存。将表达式更改为
if(i>=size)
应该修复它:)