Win XP zu doof für malloc???
-
Hi Leute...
ich verlier hier langsam die Nerven. Folgendes: Ich schreibe einen Editor, der ein RichEdit-Feld verwendet. Dabei soll bei jedem Zeichen die komplette Zeile mit einer Funktion in den char*-Buffer "line" kopiert werden. Ist doch eigentlich ein "Piece-of-Cake".
Mein Problem ist nun aber folgendes: Mein Programm funktioniert unter Windows 98 und NT OHNE Probleme. Wenn ich aber unter Windows XP versuche, 13 Bytes zu allokieren (d.h. wenn ich 12 Zeichen in einer Zeile eingebe) dann stürzt das Programm mit einer Access-Violation ab, und zwar genau an der stelle wo mein malloc() ist. ICH VERSTEHE DAS NICHT!!!!!!!!!!!!! Dann hab ich's mal mit einem new probiert ... klappt genauso toll ...
Wisst ihr vielleicht, warum Win XP zu doof für malloc ist? Und was mich noch mehr stört: In jedem meiner anderen Projekte wird ein malloc() mit mehr als 32kb durchgeführt, und er macht keine mucken. Aber hier ist er nichtmal in der Lage, 13 Bytes zu allokieren ...

Mein Programm (also die Stelle die entscheidend ist):
//Get length and position of the current line int lineStart = SendMessage(hEdit, EM_LINEINDEX, codeLine, 0); int lineEnd = lineStart + SendMessage(hEdit, EM_LINELENGTH, lineStart, 0); //HIER SCHMIERT ER AB, wenn ((lineEnd - lineStart) + 1) den Wert 13 hat char* line = (char*)malloc(((lineEnd - lineStart) + 1) * sizeof(char)); SendMessage(hEdit, EM_GETLINE, (WPARAM)codeLine, (LPARAM)line); line[(lineEnd - lineStart)] = '\0';Ich weis einfach nicht mehr weiter ...
Gruss,
~code_pilotPS: Bevor ichs vergesse: Ja, line wird nach Funktionsende wieder mit free() freigegeben...
-
bloß nicht den Fehler bei dir suchen - es sind immer die anderen schuld.
*lol* -> Troll
-
@shade of mine: Hab ich das gesagt? Nur frage ich mich, warum mein scheiss Programm unter 98 wunderbar funkt, aber Windows XP keine 13 bytes allokiert, und malloc dann abschmiert. WARUM??? Ich sehe keinen Fehler. Ich kriege nur den tollen Programmabsturz.
-
Wenn malloc abstürzt, liegt das so gut wie immer daran, dass der Heap zerschossen ist. Was wiederum so gut wie immer dadurch verursacht wurde, dass man irgendwo über einen allozierten Block hinaus geschrieben hat.
-
@bashar: Hmmm ... du hattest wohl recht, denn SO gehts:
line = (char*) malloc(((lineEnd - lineStart) + 2) * sizeof(char));Aber was war nun der Grund dafür, weil ich nichts in den Index "lineEnd - lineStart + 1" des Arrays reinschreibe... zwar nach "lineEnd - lineStart" aber nicht einen drüber ... und warum schmiert er unter Win 98/NT nicht ab?

Öhm ... liegt das vielleicht an dem "\r\n" am Ende der Zeile im RichEdit?
Danke & Gruss,
~code_pilot
-
Hmm, das ergibt keinen Sinn.
EM_LINELENGTH müsste eigentlich auch nen Zeilenumbruch mitberücksichtigen wenn es EM_GETLINE tut......schmiert denn malloc() ab oder der Code danach ?
-
hi geeky

er schmierte genau beim malloc() ab... naja jetzt geht es ja, wenn ich also + 2 mache anstatt + 1, nur unter Win98 gings halt mit dem + 1 (weil ich das Nullterminierungszeichen natürlich einbezogen hatte). Hmmm ... naja was solls
es geht ja jetzt
...Gruss,
~code_pilot