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
newundstrcpystattstd::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.strcpyKopiert die Zeichen und hängt noch ein '\0' dran.