löschen von array of chars (string) schlägt fehl



  • Hallo also ich definniere im Code einen String:

    char* help_string = new char[9];
    help_string = "Ressource";

    diesen string will ich nach nutzung löschen, aber:

    delete []help_string;

    oder nur:
    delete help_string;

    schlägt in VS 2008 fehl (schaden am heap)

    weiss jemand rat?

    der string char wird in einer funktion genutzt, ist nach ablauf der funktion der speicher vielleicht automatisch freigegeben.

    grüße und dank



  • Hallo

    Als erstes bitte benutzte doch die C++-Tags, damit kann man den Quellcode einfacher lessen.

    Und ja dein Problem liegt an dieser stelle:

    greenghecco schrieb:

    Hallo also ich definniere im Code einen String:

    char* help_string = new char[9];
    help_string = "Ressource";  // Hier verschiebst du deinen Pointer auf einen Konstanten Bereich
    

    Mit der Zuweisung verschiebst du den Pointer und kopierst nicht wie du wahrscheinlich vorhattest.
    Damit generierst du auch noch zusätzlich ein Speicherleck, da du nach der Zweisung auch die Addresse
    zu deinen Dynamisch erzeugten Speicher "vergessen" hast.

    Das kopieren müsste dann so ausschauen:

    strncpy( help_string, "Ressource", 8 );
    

    Dann kannst du auch wieder ganz normal mit

    delete []help_string;
    

    dein Char-Array löschen

    Mfg Marco



  • super vielen dank für die erklärung.

    Ist das mit der 8 nur n tippfehler?



  • Jap 🙂 Tippfehler sollte ne 9 sein, wobei ein strlen(const char*) noch einfacher wäre. Nur macht dies bei Konstanten
    keinen Sinn sonst hast diese ja gleich 2 mal drin.

    Mfg marco



  • Benutze einfach std::string.


Anmelden zum Antworten