malloc verursacht Programmabbruch

Also, erstmal haben wir hier quasi keine echte Chance Dir zu helfen solange wir den Sourcecode nicht sehen. Mehr als raten bleibt da nicht.

mueslirocker hat gesagt.:
Naja, aber egal ob durch dieses strdup, durch malloc oder durch new - es scheint durch Speicherzuweisungen ausgelöst zu werden.

Denkfehler. malloc und new dürften fehlerfrei funktionieren. Wenn es im Zusammenhang damit zu Abstürzen kommt, dann ist der Fehler vorher passiert. Ich würde darauf tippen das Du bereits vorher den Speicher beschädigst. malloc oder new machen den Fehler sichtbar, sind aber nciht die Ursache.
 
Hm, das macht Sinn, jsendrow.
Allerdings weiß ich nicht, wie ich den Speicher beschädigen könnte. Sprich, wonach ich suchen sollte.

Quelltext hier einstellen ist quasi unmöglich.
Ist viel zu viel. Und Schnipsel bringen wohl auch nichts, da der Fehler an den verschiedensten Stellen auftritt.

Ich habe einige Stellen bemerkt, an denen ich Speicher nicht wieder freigegeben habe.
Seit ich den Mangel beseitigt habe, trat der Fehler bislang nicht mehr auf.
Ich glaube aber noch nicht daran, dass er nun weg ist..

Aber kann es daran gelegen haben?
Ich mein, das klingt dann ja so, als bräuchte er den Speicher, den ich nicht wieder freigegeben hatte. Aber sollte er nicht mehr als genug Speicher haben?
Und sollte dann nicht auch ein NULL Pointer zurück kommen, statt einer nichtsaussagenden Windows Fehlermeldung?
 
mueslirocker hat gesagt.:
deepthroat,
ich möchte eigentlich auch bei 'nem Char-Array bleiben, da ich den String durch mehrere Flex-(Teil-)Progamme jage und dafür schon den Input von Flex umgeschrieben habe (der wollte immer von FILE* lesen, jetzt macht er's von einem ausgewählten char* von mir)...
Richtig. Ich kann mich erinnern ;)

const char* c_str (void);

Ist eine Methode von std::string die dir einen const char* von dem String erzeugt falls du flex mit dem String füttern willst.

Wenn man C++ zur Verfügung hat sollte man es auch ruhig benutzen. Die Klassen sind getestet und man braucht sich nicht um die Speicherverwaltung kümmern. So eine Hybrid-Lösung ist meist nichts Halbes und nichts Ganzes.

Gruß
 
deepthroat hat gesagt.:
Richtig. Ich kann mich erinnern ;)

const char* c_str (void);

Ist eine Methode von std::string die dir einen const char* von dem String erzeugt falls du flex mit dem String füttern willst.

Wenn man C++ zur Verfügung hat sollte man es auch ruhig benutzen. Die Klassen sind getestet und man braucht sich nicht um die Speicherverwaltung kümmern. So eine Hybrid-Lösung ist meist nichts Halbes und nichts Ganzes.

Gruß
Ja, ich wusste, dein Name kommt mir bekannt vor. :)

Hm, wenn ich den String eh wieder in ein Char Array umwandel.. hab ich dann was gewonnen?
Naja, zumindest könnte ich alle Strings, die Flex nicht braucht, als solche deklarieren.
Wird wohl ein Haufen Arbeit, das alles umzuschreiben.
Dann werd ich mich, sowie ich Zeit dafür finde, in die Methoden der std::string einlesen... und ich werd mal schaun, was C++ mir noch so zu bieten hat. :-)

Ich hab heute viele Testfälle drüber laufen lassen und der Fehler ist seit meinem letzten Post nicht mehr aufgetaucht.
Vielleicht hab ich wirklich zu sehr mit dem Speicher gepfuscht (Teile freigegeben, andere wieder nicht) und dann kam was durcheinander.

Ich hake das Thema erstmal ab.. nicht zuletzt auch, weil ihr ja auch nur mehr oder weniger raten könnt.
Hatte irgendwie gehofft, dass es sich um einen bekannten Fehler handelt.

Falls das Problem weiterhin auftaucht und ich neue Erkenntnisse/Vermutungen habe, meld ich mich nochmal.

Danke für eure Hilfe.
 
Zurück