• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

komische fehlermeldung

blutaermer

Ingrid Marie
Registriert
31.12.03
Beiträge
273
hallo - irgendwas laeuft hier falsch:
ich sitze hier an einem kleinen c++ programm, welches ich mal mit zerolink und mal ohne uebersetze:
beides mal laeuft das ergebnis durch, aber wenn ich zerolink an habe, bekomme ich noch folgende schnuckelige fehlermeldung:
Code:
 libSynCore(888,0xa000ed98) malloc: ***  Deallocation of a 
pointer not malloced: 0xbffff684; This could be a double free(),
 or free() called with the middle of an allocated block; 
Try setting environment variable MallocHelp to see tools to help debug

die fragen:
1. warum nur bei zerolink?
2. ist das schlimm?
3. wie kann ich dem ganzen auf den zahn fuehlen?
 

Yeti

Gast
blutaermer schrieb:
1. warum nur bei zerolink?
2. ist das schlimm?
3. wie kann ich dem ganzen auf den zahn fuehlen?

1. Gegenfrage:
Schaltest Du wirklich nur Zerolink ein und aus oder switchst Du zwischen Release/Development build?
2. Eigentlich schon ;).
3. Debuggen/Stack-Trace anschauen wenn der Fehler auftritt!??

Gruss,
Michael
 

blutaermer

Ingrid Marie
Registriert
31.12.03
Beiträge
273
1. nur zerolink! ich schwoere!
2. naja hatte ich mir eigentlich schon gedacht - aber ich wuerde viel lieber wissen warum das passiert - was mir das sagen soll etc.
schon dieser satz:
Deallocation of a pointer not malloced
macht mich krank ;)
3. also rein in den debug view und dem gdb beim arbeiten zugucken? der laeuft nicht so richtig wenn das programm auf befehle von der commandline wartet ...
 

Yeti

Gast
blutaermer schrieb:
1. nur zerolink! ich schwoere!
2. naja hatte ich mir eigentlich schon gedacht - aber ich wuerde viel lieber wissen warum das passiert - was mir das sagen soll etc.
schon dieser satz:
Deallocation of a pointer not malloced
macht mich krank ;)
3. also rein in den debug view und dem gdb beim arbeiten zugucken? der laeuft nicht so richtig wenn das programm auf befehle von der commandline wartet ...

1. das sagen sie alle ;)
2. aber was es bedeutet weisst du? (hilft naemlich ungemein bei der Fehlersuche ;)
3. ohne zu wissen wie Dein Programm aussieht kann ich da nicht mehr sagen... Dein Programm lauft in der commandline? Startest Du es von XCode aus? Hast Du mal probiert es mittels gdb von der commandline aus zu starten?

Gruss,
Michael
 

blutaermer

Ingrid Marie
Registriert
31.12.03
Beiträge
273
ok ernsthaft:
wirklich nur zerolink!
was es bedeutet? sieht so aus, als wenn was dealloziert wird , was vorher nicht alloziert wurde!?
was ist dieses MallocHelp? was macht es? ich mache derzeit alles in XCode und wollte nur ungern auf die CLI ausweichen.

1. Nachtrag
Ich habe jetzt das Problem eingekreist aber noch nicht geloest. ein char** wird durch funktionen geschleift und irgendwas bleibt dann auf der strecke.
also folgendes passiert.
function1:
Code:
char **var1;
function2(...,...,var1);
function3(...,...,var1);
sqlite3_free_table(var1);
function2(...,...,char **var2) und function3(...,...,char **var2) leitens einfach nur weiter:
Code:
function4(...,var2);
genauso wie function4(...,char **var3):
Code:
sqlite3_get_table(...,&var3,...);
function[1...4] sind von mir und machen nix anderes als den char-pointer weiterzugeben. nur sqlite3_free_table und sqlite3_get_table bearbeiten den char-pointer. und bei sqlite3_free_table ranzt das programm dann ab :(
ich als feind der pointerarithmeik tappe erstmal im dustern. muss ich in jeder funktion den pointer kopieren und zurueckschreiben?
 
Zuletzt bearbeitet:

Yeti

Gast
Zwei Vermutungen:
1. Wenn Zerolink tatsaechlich den Fehler verursacht, dann koennte es sein, dass eine Variable "gefreed" wird die noch nicht allokiert war, da die Lib noch nicht angezogen wurde. (Ohje hoert sich das unverstaendlich an). Was ich damit meine ist folgendes: Zerolink zieht Bibliotheken ja erst an, wenn sie benoetigt werden. Allerdings kommt es manchmal durcheinander, wenn nicht auf dem ueblichen Weg (z.B. normaler Funktionsaufruf) auf die Bibliothek zugegriffen wird.
In dem Fall hilft nur Zerolink aus, da der Fehler dann ja nicht aus dem Coding heraus kommt.

2. Wer und wo wird Var1 allokiert?

MallocHelp ist eine environment Variable, die mehr Tracing-Output hervorruft. Zum Debuggen steht hier vielleicht auch noch was interessantes:
http://developer.apple.com/technotes/tn2004/tn2124.html#SECMALLOCDEBUG
 

blutaermer

Ingrid Marie
Registriert
31.12.03
Beiträge
273
dank function3 ranzt das ding jetzt auch ohne zerolink ab (allerdings wirds in function3 testdatenbedingt nicht weitergereicht - vielleicht liegts daran!?)

also ich allokiere gar nix - habe ich auch noch nie gemacht. koennte ein fehler sein - weiss ich aber nicht.
in dem sqlite3 standardbeispiel wird auch nichts allokiert. da gibs ne klasse mit einer klassenvariablen char **result. die adresse dieser variable wird einmal in einer methode an sqlite3_get_table uebergeben und dann wird die variable noch an sqlite3_free_table uebergeben(in der selben methode) - mehr passiert dort auch nicht ...
 

Yeti

Gast
Vielleicht hab ich's uebersehen... aber vielleicht kannst Du mal einen Link zum kompletten Source oder Projekt posten, dann kann ich's ggf. auch mal durch den Debugger jagen...
 

blutaermer

Ingrid Marie
Registriert
31.12.03
Beiträge
273
es war ganz einfach und ist schon lange geloest. der vollstaendigkeithalber:
sqlite3_get_table bekommt (unter anderem) ein char *** ich habe aber nur ein char** durch die parameter der funktionen geschleust. das war dann kein call by reference sondern by value - das wars! mehr nicht. traurig aber wahr.

ich vermute mal, das mir char** schon genug pointer waren.