这是我的简单程序,它有两个函数,一个是创建一系列Fibonacci然后将它添加到数组中。另一个用于释放数组,但它不起作用。有人能帮助我吗?
int **createFibArray(int n){
int **arr = new int*[n];
int fnum1 = 1,fnum2=1,fnum;
// n== 1
if(n == 1){
arr[0] = new int;
*arr[0] = 1;
return arr;
}
// n>= 2
arr[0] = new int;
arr[1] = new int;
*arr[0] = 1;
*arr[1] = 1;
// fib calculator
for(int i=2; i<n; i++){
fnum = fnum1 + fnum2;
fnum1 = fnum2;
fnum2 = fnum;
arr[i] = new int;
*arr[i] = fnum;
}
return arr;
}
//This function takes an array pointer, and deallocates memory
void removeArray(int head[]){
delete [] head;
head = nullptr;
}
int main(){
int **head = createFibArray(10);
for(int i=0;i<10;i++){
cout << *head[i] << endl;
}
cout << "------" << endl;
removeArray(*head);
for(int i=0;i<10;i++){
cout << *head[i] << endl;
}
return 0;
}
答案 0 :(得分:0)
您需要强烈考虑返回整数数组而不是整数指针数组。如果你坚持使用原始指针而不是STL容器:
int **createFibArray(int n)
应该是
int *createFibArray(int n)
而且:
int **arr = new int*[n];
将是这样的:
int *arr = new int[n];
然后你几乎可以从你使用它的每个地方删除*
,删除功能可以保持不变。您将调用更改为删除功能:
removeArray(*head);
变为:
removeArray(head);
但是,在函数中将值设置为nullptr
是没有价值的。要么在调用removeArray
之后这样做,要么完全省略它,如果你确定它在删除后永远不会被重复使用。
这将我们带到了main
函数的最后一部分。删除指针后取消引用指针(或在此情况下尝试删除它)是未定义的行为。