Seltsame Endlosschleife
-
Hallo,
ich habe ein (für mich) seltsames Problem, das ich überhaupt nicht verstehe. Erstmal der relevante Code(-ausschnitt):
do { element_data* new_data = new element_data(NULL, 0, NULL, 0); //delete new_data; std::cout << "New Element\n"; heapEntry32.dwSize = sizeof(HEAPENTRY32); }while(Heap32Next(&heapEntry32));Folgendes Problem:
So, wie ihr den Quellcode seht, wird eine Endlosschleife produziert, zumindest hörte die Konsolenausgabe auch nach 3Minuten nicht auf.
Füge ich den auskommentierten Teil ein (delete new_data) oder lasse das Erstellen des Objektes new_data weg, dann ist das Verhalten, wie gewünscht: Es wird ca. 10-20mal "New Element" auf der Konsole ausgegeben, sprich es ist endlich.
Der Konstruktor von element_data sieht wie folgt aus:element_data::element_data(ULONG_PTR address, size_t size, HANDLE hBlock, DWORD dwFlags) { this->base_address = address; this->data_size = size; this->handle = hBlock; this->flags = dwFlags; }Ich hoffe mir kann hier jemand erklären, wieso die Schleife endlich ist, wenn ich die Objekterzeugung weglasse bzw. das Objekt gleich wieder lösche, aber unendlich, wenn ich einfach nur das Objekt erzeuge ohne es zu löschen (es wird später noch gebraucht).
Bin am verzweifeln...
-
Ich mutmaße mal, dass du durch das "new" neue Daten in den Heap legst und dadurch die Schleife nicht mehr endet. Was auch immer dieses Heap32-Gedöns macht...
-
Ohman.. Du hast recht... Irgendwie logisch, wenn das Programm den Heap auslesen soll und ich davor immer mal wieder was neues auf den Heap lege, dass die Schleife endlos ist
Danke für den Hinweis. Die Frage ist jetzt: Wie kann ich die Enträge dynamisch zwischenspeichern ohne dass ich den Heap dabei mit neuen Daten belade?