Valgrind meldet keinen Speicherverlust bei "Array löschen"
Nachdem ich den folgenden C ++ - Code implementiert hatte, lief ichvalgrind --leak-check=full
um zu überprüfen, ob ein Speicherverlust aufgetreten ist. Das Ergebnis warBeim Beenden wurden 0 Bytes verwendet undLeckagen sind nicht möglich.
Später stellte ich jedoch fest, dass ich die Verwendung vergessen habedelete[] x
statt nurdelete x
im Destruktor.
Ich habe nach Erklärungen gesucht (zum Beispiel:Delete vs Delete [] -Operatoren in C ++), und alles, was ich las, sagte das mitdelete
ohne[]
kann zu Speicherverlusten führen, da nur der Destruktor für das erste Objekt im Array aufgerufen wird.
Ich habe den Code geändert, um [] zu löschen, und die Ausgabe von valgrind war dieselbe (wie erwartet). Aber jetzt bin ich verwirrt:"Gibt es ein Problem mit Valgrind oder?delete
Funktioniert auch ohne Operator einwandfrei für Arrays[]
? "
#include <iostream>
#include <string.h>
using namespace std;
class Foo {
private: char *x;
public:
Foo(const char* px) {
this->x = new char[strlen(px)+1];
strcpy(this->x, px);
}
~Foo() {
delete x;
}
void printInfo() { cout << "x: " << x << endl; }
};
int main() {
Foo *objfoo = new Foo("ABC123");
objfoo->printInfo();
delete objfoo;
return 0;
}