1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

komische fehlermeldung

Dieses Thema im Forum "OS X-Developer" wurde erstellt von blutaermer, 15.05.06.

  1. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    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?
     
  2. Yeti

    Yeti Gast

    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
     
  3. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    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 ...
     
  4. Yeti

    Yeti Gast

    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
     
  5. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    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?
     
    #5 blutaermer, 15.05.06
    Zuletzt bearbeitet: 15.05.06
  6. Yeti

    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
     
  7. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    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 ...
     
  8. Yeti

    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...
     
  9. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    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.
     

Diese Seite empfehlen