speicherfreigabe => Heapproblem
-
In meinem Programm möchte ich den Inhalt in einem Eingabezeile in einem TCHAR* speichern, um die Informationen darin in einer Textdatei auszugeben....allerdings fliegt mir das Programm um die Ohren wenn ich den über malloc geholten Speicher freigeben möchte, mit der Meldung das es ein Heapproblem gibt.
case WM_COMMAND: switch(LOWORD(wParam)) { case OK_CHILD: TCHAR* buffer = NULL; int iLength = 0; iLength = GetWindowTextLength(hNam); if (iLength > 0) { std::ofstream Output("Output.txt", std::ios::binary | std::ios::out); buffer = (TCHAR*) malloc(iLength); GetWindowText(hNam, buffer, iLength + 1); Output<<buffer; Output.close(); if (buffer != NULL) free(buffer); buffer = NULL; } break; }HEAP[Adressbuch.exe]: Heap block at 00885C60 modified at 00885C94 past requested size of 2c
Windows hat einen Haltepunkt in Adressbuch.exe ausgelöst.Dies kann auf eine Beschädigung des Heaps zurückzuführen sein und weist auf ein Problem in Adressbuch.exe oder in einer der geladenen DLLs hin.
Weitere Analyseinformationen finden Sie möglicherweise im Ausgabefenster.
Was ist daran den so falsch?
-
+ 1
-
stichwort schrieb:
+ 1
Wenn ich das +1 bei GetWindowText() wegmache, bleibt der Fehler leider bestehen.
-
bei malloc + 1 hinzufügen und bei GetWindowText das + 1 weglassen.
-
Du musst
(sizeof(TCHAR)+1)*iLengthzum allokieren verwenden!
-
Nicht eher:
sizeof(TCHAR) * (iLength + 1)
-
danke! funktioniert jetzt soweit.
Nun hab ich noch ein kleins problem mit dem streamklassen und TCHAR. Wenn ich den text in die datei ausgeben, wird nach jedem zeichen ein leerzeichen ausgegeben.
Wie kann ich mir das den sauber in eine datei ausgeben lassen?
TCHAR* buffer = NULL; int iLength = 0; iLength = GetWindowTextLength(hNam); if (iLength > 0) { std::ofstream output("Output.txt", std::ios::out); buffer = (TCHAR*) malloc(iLength * sizeof(TCHAR)); GetWindowText(hNam, buffer, iLength); output.write((char*)buffer, iLength); output.close(); if (buffer != NULL) free(buffer); buffer = NULL; }
-
std::basic_ofstream<TCHAR>
-
f schrieb:
std::basic_ofstream<TCHAR>wie benutzt man das? ich bin da scheinbar zu blöd für. Brauchbare Beispiele find ich dazu auch nicht
