0

我正在尝试动态增加int数组的内存,但是我在让它工作时遇到了问题。它没有扩展并向数组添加更多元素,我不确定我做错了什么。请帮忙!

int* fibs = NULL;

void genFibs(){
    int i = 1,curSize = 0,curNum = 0;
    int flag = 1;
    while(flag){
        if(curSize != 0 &&curSize != 1){
            curNum = fibs[curSize-2]+fibs[curSize-1];
        }else if(curSize-1 == 1){
            curNum = fibs[curSize-1]+fibs[curSize-1];
        }else{
            curNum = 1;
        }
        if(curNum<=10){
            curSize++;
            fibs = (int*)realloc(fibs,curSize*sizeof(int));
            fibs[curSize-1] = curSize;
        }else{
            flag = 0;
        }
    }
  }
}

void printFibs(){
    int size = sizeof(fibs)/sizeof(int);
    int i = 0;
    for(i = 0;i<size;i++){
        printf("%d is: %d\n",i,fibs[i]);
    }
}
4

2 回答 2

5

好吧,您的打印代码是错误的。sizeof(fibs)将始终被评估为sizeof(int *)因为它只是一个指针。

您必须找到一种方法将其传递size给您的print函数。例如,它可能是数组的第一个值。但这是实现细节,由您决定。

编辑:更改sizeof(void *)sizeof(int *)因为指针大小可能会有所不同,正如 pmg 所指出的那样。

于 2013-06-06T09:35:46.127 回答
1

sizeof(fibs)是指针的大小,fibs它是恒定的,因此您的打印函数将始终打印相同数量的元素

于 2013-06-06T09:28:40.457 回答