我有以下代码,我调用一个函数并创建一个动态的int数组,然后用算法填充该数组
的main.cpp
...
int main(void){
srand((long) 1234567);
callFunction1();
return 0;
}
functions.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 = new int [N];
造成这个问题的原因是什么?
答案 0 :(得分:4)
您在此处访问A
越界:
for (int i=2;i<=N;i++){
A[i] = ....
A
只能从0
到N-1
编入索引,即在 [0,N] 范围内。
答案 1 :(得分:1)
callFunction2中也有内存泄漏。