Dies ist mein einfaches Programm, das zwei Funktionen hat, eine ist es, eine Reihe von Fibonacci zu erstellen und sie dann einem Array hinzuzufügen. Ein anderes wird verwendet, um das Array freizugeben, aber es funktioniert nicht. Kann mir jemand helfen?Wie man dieses Array freigibt
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;
}
Schnelle Frage: Warum ein Array von Zeigern zu einem einzigen 'int'? Sie werden viel weniger Probleme mit einem Array von "int" haben und es wird wahrscheinlich die gleiche Größe oder kleiner sein. – user4581301
Woher wissen Sie, dass es nicht funktioniert? – immibis
[ASan] (http://clang.llvm.org/docs/AddressSanitizer.html) sagte mir, dass Sie Speicher mit 'new' zuweisen, wenn Sie' arr [0] = new int; 'und' löschen' Sie es mit 'lösche [] head;'. Du darfst das nicht. Sie müssen 'new' mit' delete' und 'new []' mit 'delete []' verbinden. – nwp