如何根据数组的大小重新分配?

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)

应该修复它:)