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。たとえば、配列の最初の値である可能性があります。しかし、これは実装の詳細であり、あなた次第です。

編集: pmg で指摘されているように、ポインターのサイズが異なる場合があるため、にsizeof(void *)変更されました。sizeof(int *)

于 2013-06-06T09:35:46.127 に答える