"Heap Corruption" warum?
-
Hallo,
ich bin in meinem Programm auf folgendes Problem gestoßen:
HEAP CORRUPTION DETECTED: after Normal block (#2209) at 0x00ABD360. CRT detected that the application wrote to memory after end of heap buffer. Normal located at 0x00ABD360 is 24 bytes long.Ich habe auch die Stelle gefunden, welche dieses Problem verursacht.
if (!exists){ vec.push_back(new RedirectableLocalFolder(drive)); RedirectableObject **obj = new RedirectableObject*[vec.size()+1]; obj = enum_list; unsigned int i; for (i = 0; i < vec.size(); i++) { obj[i] = vec[i]; } // mark new end assert(_CrtCheckMemory()); obj[i] = NULL; // HEAP Corruption assert(_CrtCheckMemory()); } }Nur leider versteh ich nicht wieso das Problem auftritt.
obj[0] wird der Vektor vec[0] und obj[1] NULL zugewiesen. Speicher sollte meiner Meinung nach auch genügend allociert wurden sein. Wenn ichobj[i] = NULL; // HEAP Corruptionnicht ausführen lasse, tritt der Fehler nicht auf.
Kann mir das mal bitte jemand erklären
??
Vielen DankRobert
-
RedirectableObject **obj = new RedirectableObject*[vec.size()+1]; obj = enum_list;Dir ist klar, was du mit so einer Aktion erreichst? Mit der zweiten Zeile vergisst du die Adresse des per new angelegten Bereiches und biegst obj um auf das Ziel von enum_list (wo immer das herkommt).
PS: Darf man fragen, wozu dieser Code gut sein soll?
-
hmm, stimmt vollends. *mist*
naja manchmal will man es einfach nicht sehen. *auf kopf klatsch*ich wollte an eine Liste von RedirectableObjects ein beliebiges Object anhängen. Die enum_list ist die bereits bestehende Liste. An diese soll das neue Object "angeflanscht" werden.
-
Und was ist in diesem Zusammenhang 'vec'? (und warum hantierst du noch mit nackten Pointern herum, wenn du doch die STL-Container dafür nutzen kannst?)
-
"vec" ist eine Vektor der die RedirectableObjects enthält. Das soll eine Erweiterung eines bereits vorhandenen Programmes werden. In diesem wird es bereits so verwendet um die vorhandenen Laufwerke zu enumerieren. Ich sollte die Möglichkeit einbauen einen weiteres lokales Verzeichnis dieser Liste hinzuzufügen, ohne dabei die Struktur des Programmes zu verändern.
Achso ganz vergessen. Vielen Dank für die Hilfe. Hab das Problem nun gelöst
