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;
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage