0

我有以下代码,我在其中调用一个函数并创建一个动态整数数组,然后用算法填充该数组

主文件

...
int main(void){

    srand((long) 1234567);

    callFunction1();

    return 0;

}

函数.h

...
    int *A;
    int N;

    //prototype
    void callFunction2();

    void callFunction1(){

         int choice;
         cin >> choice;

         while (choice != 2){

               callFunction2();

               cin >> choice;
         }

    }

    void callFunction2(){

         cout << "Enter array size" << endl;
         cin >> N;

         A = new int[N];
         A[0] = 0;
         A[1] = 1;

         for (int i=2;i<=N;i++){
             A[i] = A[i-1] + A[i-2];
         }

    }

所以上面的代码大部分时间都可以工作,但有时它会在我初始化数组的那一行崩溃

A = 新的 int[N];

这个问题的原因可能是什么?

4

2 回答 2

4

您在A这里访问越界:

for (int i=2;i<=N;i++){
         A[i] = ....

A只能从0到索引N-1,即在[0, N)范围内。

于 2013-10-20T16:01:59.510 回答
1

您在 callFunction2 中也有内存泄漏。

于 2013-10-20T16:05:43.280 回答