Seltsames Problem, free() stürzt ab???
-
Hallo Coders!
Ich bin noch mal der, der sich gestern so gefreut hat (siehe -> http://www.c-plusplus.net/forum/viewtopic.php?t=98387), aber jetzt habe ich mehr oder weniger ein anderes Problem, was ich selbst nicht verstehe.
Wenn ich in meinem Code-Editor mit Syntax Highlighting einfach mal irgendwas eintippte, stürzte mein System bei ungefähr 48 Zeichen komischerweise immer mit einer Zugriffsverletzung ab, die bei einem Aufruf von free() zustande kam! "Fehler beim schreiben in Adresse Bla blubb" stand da.
Ich habs nicht verstanden. Komischerweise funktioniert es jetzt wieder...Warum? Ich kann's euch nicht sagen. Ich hab nicht wirklich was gemacht.Übrigens: Auf Windows XP gabs keine Probleme, auf NT4 aber schon, und beide haben die RICHED20.DLL. Wenn ich die alte RICHED32.DLL verwende (die ich aber wegen der Undo-Geschichte nicht verwenden kann) dann funktionierte es auch ohne Probleme. Aber jetzt geht ess ja komischerweise? Kann mir DAS mal einer erklären???
~cp (versteht die Welt nicht mehr
)
-
code_pilot schrieb:
Wenn ich in meinem Code-Editor mit Syntax Highlighting einfach mal irgendwas eintippte, stürzte mein System bei ungefähr 48 Zeichen komischerweise immer mit einer Zugriffsverletzung ab
Versteh ich dich richtig, dir ist deine IDE abgestürzt? Dann kann dir vermutlich hier niemand helfen. Da müsstest du dich schon an den Hersteller wenden.
Oder ist dir vielmehr dein geschriebenes Programm abgestürzt? Dann solltest du mal ein bisschen Code posten.
-
groovemaster schrieb:
Oder ist dir vielmehr dein geschriebenes Programm abgestürzt? Dann solltest du mal ein bisschen Code posten.
Nein mein selbstgeschriebenes Programm ... das Problem - bzw. was ich dran nicht verstehe ist die Tatsache, das alles mit RichEdit 1.0 funktioniert, aber sobald ich den RichEdit 3.0 benutzt schmiert er ab. Code kann ich nicht posten, denn das hängt alles ineinander, da wird keiner was raus erkennen können.

Naja ... immoment gehts mal wieder

Gruss,
~cp
-
er meint sein eigenes Programm.
Ich schätze mal das du durch free() was freigibts, worauf der Richie noch zugreifen will/wollte und dann ins leere grif.Ich hatte so ein ähnlichen Effeckt mal mit einem ActiveX element.
Du mußt dann halt warten, btw. prüfen ob Richie zuende gefliegt ist.
-
Wenn bei free() nen Absturz kommt, wirst du wohl:
a) mehr speicher verändert haben als du mit malloc() angefordert hast
b) den pointer den du bei free() angibst und von malloc() bekommen hast verändert haben...
c) Etwas freigeben wollen, was gar nicht mit malloc() reserviert wurde...
-
geeky schrieb:
Wenn bei free() nen Absturz kommt, wirst du wohl:
a) mehr speicher verändert haben als du mit malloc() angefordert hast
b) den pointer den du bei free() angibst und von malloc() bekommen hast verändert haben...
c) Etwas freigeben wollen, was gar nicht mit malloc() reserviert wurde...Joa aber das hab ich gar nicht!
Ich hab nur die RichEdit Version von 1.0 auf 3.0 geändert, aber das hat überhaupt nichts mit der Funktion zu tun, die abschmiert...
-
dann solltest du dich informieren was bei richedit von der Version 1.0 zur Versoin 3.0 verändert wurde
-
Ach du scheiße!
Ich glaub ich hab den Fehler gerfunden!!!!
*GRUMMEL* man sollte auch mal lesen, was in der MSDN steht!!!
Und zwar lag das Problem bei EM_GETLINE!!!lParam
Pointer to the buffer that receives a copy of the line. Before sending the message, set the first word of this buffer to the size, in TCHARs, of the buffer. For ANSI text, this is the number of bytes; for Unicode text, this is the number of characters. The size in the first word is overwritten by the copied line.bei mir stand dann wohl immer irgendein scheiß im speichern, anhand dessen er die Größe ermittelt hat. Jetzt gehts, nachdem ich vorher immer mache:
*(int *) pstrBuffer = iCharsPerLine ;Und schon funktionierts mit jeder riched20.dll!!!
Was ein Mist!
Naja danke jedenfalsl für eure Hilfevbersuche. Ich war halt nur so fertig, weil es ja vorher immer funktioniert hat... mit richedit 1.0!
Gruss,
~code_pilot
-
Vorsicht, word ist in WinAPI als 2-Byte Ganzzahl definiert, int ist jedoch 4 Byte. Du überschreibst uU mehr als du solltest.