Valgrind



  • Hi Leute

    Bin grade dabei mit valgrind mein programm durchzuchecken und haben noch einen fehler.

    aber finde es nicht.

    ==3423== HEAP SUMMARY:
    ==3423== in use at exit: 0 bytes in 0 blocks
    ==3423== total heap usage: 155 allocs, 155 frees, 11,936 bytes allocated
    ==3423==
    ==3423== All heap blocks were freed -- no leaks are possible
    ==3423==
    ==3423== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 11 from 6)
    ==3423==
    ==3423== 1 errors in context 1 of 1:
    ==3423== Conditional jump or move depends on uninitialised value(s)
    ==3423== at 0x4026CDA: __GI_strlen (mc_replace_strmem.c:284)
    ==3423== by 0x409CAB4: puts (ioputs.c:37)
    ==3423== by 0x8048984: encryptPrivateMsg (in /home/martin/workspace/ex2/ex2)
    ==3423== by 0x804879E: buildHistogramm (in /home/martin/workspace/ex2/ex2)
    ==3423== by 0x804851F: main (in /home/martin/workspace/ex2/ex2)
    ==3423== Uninitialised value was created by a heap allocation
    ==3423== at 0x4025BD3: malloc (vg_replace_malloc.c:236)
    ==3423== by 0x804885E: encryptPrivateMsg (in /home/martin/workspace/ex2/ex2)
    ==3423== by 0x804879E: buildHistogramm (in /home/martin/workspace/ex2/ex2)
    ==3423== by 0x804851F: main (in /home/martin/workspace/ex2/ex2)
    ==3423==
    --3423--
    --3423-- used_suppression: 11 dl-hack3-cond-1
    ==3423==
    ==3423== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 11 from 6)

    das kommt beim valgrind raus. daraus schließe ich das ich irgendwo ne variable nicht definiert habe.
    ohne jetzt mal den code zu posten, weil der sowieso viel zu lang wäre. gibt es da noch andere möglichkeiten auf die der fehler hinweist ?
    wie schwerwiegend ist der fehler ?

    so far


  • Mod

    Speicher_sucher schrieb:

    das kommt beim valgrind raus. daraus schließe ich das ich irgendwo ne variable nicht definiert habe.

    Wenn du mit definiert meinst, dass du ihr einen Wert zuweist, dann ja.

    ohne jetzt mal den code zu posten, weil der sowieso viel zu lang wäre. gibt es da noch andere möglichkeiten auf die der fehler hinweist ?

    Nein, das ist doch sehr eindeutig.

    wie schwerwiegend ist der fehler ?

    Sehr schwerwiegend, sofern du nicht gerade einen Zufallsgenerator initialisieren willst oder dies wirklich Absicht ist, weil der Wert der Variablen von einem anderen Programm beschrieben wird.



  • Naja das einzige loch im speicher das ich bis jetzt gefunden hab ist bei großen input files, wo 1 free zuwenig ist.

    aber wie finde ich den fehler, weil nach dem ich den gefunden hab hab ich alles definiert.

    irgendwelche tipps beim weiteren fehlersuchen ?


  • Mod

    Speicher_sucher schrieb:

    irgendwelche tipps beim weiteren fehlersuchen ?

    Was heißt hier Suche? Compilier einfach mal mit Debugsymbolen, dann sagt dir valgrind ganz genau wo der Fehler ist.

    edit: Da ich aber schon sehe, dass der Fehler letztendlich in einem puts stattfindet und du eine Funktion namens encryptPrivateMsg hast, nehme ich mal an, dass du in deinem Programm irgendwie Strings manipulierst. Und wenn ich dies richtig geraten habe, dann rate ich weiter, dass du an einer Stelle eine Nullterminierung vergessen hast und dann versuchst einen nicht terminierten String auszugeben (mit einer Funktion die intern puts benutzt, das könnte so ziemlich jede Ausgabefunktion sein).



  • zum glück hab ich nur 2 ausgabefunktionen 😃 also sollt ich den fehler wohl schnell finden 🙂


  • Mod

    Speicher_sucher schrieb:

    zum glück hab ich nur 2 ausgabefunktionen 😃 also sollt ich den fehler wohl schnell finden 🙂

    Ja, aber das ist erstmal nur geraten von mir anhand der eher spärlichen valgrind-Ausgabe. Mit den Debuginformationen würdest du handfeste Zeilennummern bekommen.



  • wenn du mir sagst was ich noch hinzufügen soll kann ich dir geben was du brauchst.


  • Mod

    Speicher_sucher schrieb:

    wenn du mir sagst was ich noch hinzufügen soll kann ich dir geben was du brauchst.

    SeppJ schrieb:

    Speicher_sucher schrieb:

    irgendwelche tipps beim weiteren fehlersuchen ?

    Was heißt hier Suche? Compilier einfach mal mit Debugsymbolen, dann sagt dir valgrind ganz genau wo der Fehler ist.



  • Habs grade gelöst, sepp du hattest recht.

    ich hab zeichen für zeichen vom einen in den anderen string kopiert und dann den ergebnisssring per %s ausgegeben. da wars anscheinend. nun hab ichs mit forschleife und %c ausgeben. kein fehler mehr 😉

    danke 😉



  • ja ich hab die befehel eh schon durchgeschaut, aber nix wirklich hilfreiches gefunden... das is es


Log in to reply