Heap Corruption beim Aufruf von delete[]



  • Hallo,

    mein Problem ist, dass ich beim freigeben der Arrays ein Heap Corruption bekomme. Das komische dabei ist, dass dies nur bei 1 von 2 Variablen auftritt

    Hier der Code:

    char *charType = new char[GetWindowTextLength(hWndComboboxR)+1];
    char *charR = new char[GetWindowTextLength(hWndComboboxType)+1];
    ComboBox_GetText(hWndComboboxType, charType, strlen(charType)+1);
    ComboBox_GetText(hWndComboboxR, charR, strlen(charR)+1);
    
    //Code... 
    
    //Speicher freigeben
    delete[] charType;
    delete[] charR;  //Heap Corruption
    

    Die API-Funktionen seien mal außer Acht gelassen, denn die Funktionieren problemlos. Die länge, sowie der Inhalt des Char-Arrays sind so, wie sie sein sollten.

    Grüße



  • Nutz std::vector.
    Dein Problem ist, dass das strlen in Zeile 3 und 4 einen falschen Wert zurückgibt und deshalb die API-Funktion wohl irgendwelche Heapverwaltungsstrukturen kaputtschreibt.



  • Hallo,

    Danke für die schnelle Antwort.

    Genau an strlen() lags. Hätte ich mir denken können... 🙄



  • Der Code ist vor allem nicht sicher. Was, wenn sich der Text (und somit die Länge) vom GetWindowTextLength Aufruf zum ComboBox_GetText Aufruf ändert? Unwahrscheinlich, aber möglich.



  • Glaub ich nicht. Kannst ja zum Testen mal zwischen den beiden Instruktionen ein Sleep(5000); einbauen. Ich glaube, in dieser Zeit wird die GUI nicht reagieren und nicht bedienbar sein.


Anmelden zum Antworten