Was will mir dieser Fehler sagen?

lano

Aktives Mitglied
Moin.

Ich hab nen script das in einer schleife immer wieder mein Programm aufruft.
Jetzt gibt das an einer Stelle eine Fehlermeldung.
Diese:
Code:
*** Error in `juisck3': double free or corruption (!prev): 0x01fe6208 ***
./juisck3d.sh: Zeile 6: 19174 Abgebrochen             juisck3 --show --Id $i --update >> /home/pi/juis.json
done.

Wie man sich denken kann zähle ich $i einfach hoch. Und irgendwo zwischen 1 und 430 muss es zu diesem Fehler kommen.
Was sagt mir (!prev): 0x01fe6208 oder besser, was will es mir mitteilen ?

Ich würde als erstes mein bash script erweitern mit -x
Dann den fehlerhaften Aufruf raus suchen und den manuell durch gdb jagen.
Und denn halt ma gucken ...
 
Kann es sein dass du irgendwie über 430 Elemente iterierst, die eigentlich Index 0 - 429 haben müssten?

Nein. Sind Datenbank abfragen. wenns den Eintrag nicht gibt kommt nen leeres struct zurück.

Frag mich nicht. Ich hab noch nen kleinen Fehler debuggt und seit dem konnt ich den nicht mehr provozieren.

Was will der mir mit:
sagen?

free(var);
free(var); ?
 
Genau, so was in der Art. Er versucht dir zu sagen, dass du irgendwo auf ungültigen Speicher zugreifst. Off by one war das was ich vermutet habe, doppelte Freigabe von Speicher könnte eine andere Möglichkeit sein, da das zweite free auf einen ungültigen Pointer zugreift. Das kann sich auch in der Inplementierung der SQLite Funktionen verbergen. Da musst du jeweils auf der Manpage nachlesen, was die einzelnen Funktionen tun. Bspw. gibt sqlite3_finalize ein Prepared Statement frei usw.
String ersetzen Geschichte macht ärger
Genau. Auch da prüfen was du übergibst, zurückbekommst und freigibst. BTW. Upgedatete Replace Funktion ist in den Ressourcen, falls ich da noch einen Bug drin gehabt haben sollte ...
 
Zurück
Oben Unten