Speicher innerhalb einer std::list freigeben



  • Hallo!

    Ich habe ein Problem bei der Freigabe von Speicher in einer std::list.

    ...
    struct TEXTURE
    {
    	LPDIRECT3DTEXTURE9	texture;
    	char			*filename;
    };
    ...
    std::list<TEXTURE> textures;
    TEXTURE texture;
    ...
    texture.filename = new char[strlen(Dateiname)];
    strcpy(texture.filename, Dateiname);
    textures.push_front(texture);
    ...
    for(std::list<TEXTURE>::iterator it = textures.begin();
    	it != textures.end(); it++)
    {
    	...
    	delete[] it->filename;
    	...
    }
    textures.clear();
    ...
    

    Ich muss ja den zugewiesenen Speicher für 'filename' wieder freigeben, bekomme aber eine 'Heap-Corruption'-Fehlermeldung in Zeile 19 (delete[]).

    Was mache ich falsch?



  • Starcluster schrieb:

    Was mache ich falsch?

    Du verwendest new und strcpy statt std::string .



  • 1. std::string statt char-pointer löst das problem.
    2. wieso std::list? du suchst std::vector



  • Ah, ich Idiot ;).
    Danke für die schnelle Hilfe!



  • Starcluster schrieb:

    Hallo!

    Ich habe ein Problem bei der Freigabe von Speicher in einer std::list.

    ...
    texture.filename = new char[strlen(Dateiname)];
    strcpy(texture.filename, Dateiname);
    

    ⚠ Achtung: buffer overflow ⚠
    strlen(Dateiname) liefert die Anzahl der Zeichen. strcpy Kopiert die Zeichen und hängt noch ein '\0' dran.


Anmelden zum Antworten