Ich lerne immer noch C++ und habe eine Frage, die vielleicht offensichtlich ist, oder vielleicht weiß ich einfach nicht, was ich versuche zu tun. Ich habe Funktionen, die eine Matrix nehmen (eine Klasse, die ich geschrieben habe, die einen richtig geschriebenen Destruktor hat) und daraus eine neue Matrix erstellen, die einen Verweis auf die neue zurückgibt. Ich muss möglicherweise Zehntausende Male auf diesen Matrizen iterieren, also muss ich sicherstellen, dass ich keine Speicherlecks habe. Die Frage ist also, wie lösche ich die Matrix, die ich nicht mehr benötige, um Platz für die nächste zu schaffen? Hier ist der Code Ich versuche, leckagefrei zu bekommen:C++ Referenz löschen
DynamicMatrix<double> x0 = getX0(n);
DynamicMatrix<double>exactU = getExactU(n);
DynamicMatrix<double> b = getB(n) * w;
DynamicMatrix<double> x1 = getX1(x0, b, w, n);
while(!isConverged(exactU,x1,e)){
delete x0; //<<<<< This doesn't work. Nor does delete &x0.
x0 = x1;
x1 = getX1(x0, b, w, n);
}
Jede der getX() Methoden erzeugt einen Zeiger auf eine Matrix, und liefert eine Referenz auf die Matrix, wie in getX0():
DynamicMatrix<double> &getX0(int n){
DynamicMatrix<double>* mat1 = new DynamicMatrix<double>(n * n,1);
for (int i = 1 ; i <= n; i++){
for (int j = 1; j <= n; j++){
mat1->set((i-1)*n +j, 1, 0);
}
}
return *mat1;
}
Also dann, 'löschen X0' Fehler aufrufen, weil es einen Zeiger benötigt. 'delete & X0' gibt an, dass der freigegebene Zeiger nicht zugewiesen wurde. Was ist der richtige Weg, dies zu tun? Oder mache ich etwas völlig falsches? Mit Matrizen zu groß und mit zu vielen Iterationen, meine große Festplatte hat keinen Platz mehr, was ich nur annehmen kann bedeutet, ich habe Speicherlecks in Hülle und Fülle.
Wenn auf Ihrer Festplatte kein Speicher mehr verfügbar ist, bedeutet dies, dass Ihre Auslagerungsdatei so konfiguriert ist, dass sie zu groß wird. –