invalid write of size 4



  • Hallo liebe Community,

    ich habe schon im Forum geschaut ob es das Thema schon gab,
    bin aber leider nicht fündig geworden.

    Beim Testen meines Programms mit valgrind kommen
    derartige Fehler und ich habe heute schon mit einem
    Kumpel ziemlich lange geschaut, was das sein kann, aber
    wir kommen einfach nicht drauf.

    Wir bekommen diesen Fehler ziemlich oft,
    und wenn ich dann im Programm schaue,
    kommt das zum Beispiel bei einer solchen Zeile:

    name = strtok(array_of_friends, ";");
    

    <-- Zeile 796.

    Und das ist dann der Fehler, den valgrind rausschreibt.
    Hat da wer Erfahrung damit? Oder kann mir jemand vielleicht
    einen Tipp geben, woran das liegen könnte?

    ==30094== Warning: client switching stacks? SP change: 0xbecda2a0 --> 0xbea84cf0
    ==30094== to suppress, use: --max-stackframe=2446768 or greater
    ==30094== Invalid write of size 4
    ==30094== at 0x804A1BD: sortNamesListDegree (assa.c:796)
    ==30094== by 0x804AEA7: listDegree (assa.c:1024)
    ==30094== by 0x8048E2A: runCommands (assa.c:419)
    ==30094== by 0x8048D9E: runProgramm (assa.c:389)
    ==30094== by 0x8048C52: splitText (assa.c:326)
    ==30094== by 0x80488B2: OpenFile (assa.c:195)
    ==30094== by 0x804B2B1: main (assa.c:1240)
    ==30094== Address 0xbea84cf4 is on thread 1's stack

    Ich sag schon mal vielen Dank für die Mühen.
    Lg Martin


  • Mod

    Du schreibst in irgendwas, wo du nicht hinschreiben darfst. Was soll man dazu mehr sagen? valgrind wird Recht haben.

    Der Fehler mag zwar beim strtok auftreten, aber höchstwahrscheinlich liegt die Ursache ganz woanders. Vermutlich bei fehlerhafter manueller Speicherverwaltung.



  • SeppJ schrieb:

    Der Fehler mag zwar beim strtok auftreten, aber höchstwahrscheinlich liegt die Ursache ganz woanders. Vermutlich bei fehlerhafter manueller Speicherverwaltung.

    Oder auch fehlende manuelle Speicherverwaltung.
    Z.B. durch zu große variable length arrays. (wg. client switching stacks? SP change: 0xbecda2a0 --> 0xbea84cf0 ).



  • Danke für die schnelle Antwort.

    Kann ich irgendwie eingrenzen wo der tatsächliche Fehler liegen könnte.
    Bei 1200 Zeilen Code ist das nämlich sonst echt ziemlich blöd.

    lg Martin



  • Als erstes schaute ich doch in sortNamesListDegree() und beteiligte Variablen.

    Benutzt Du malloc/free , bzw. große Arrays?



  • @Furble Wurble Der Tipp war goldrichtig. Vielen Dank. Hatte ein * anstatt einem + geschrieben.

    lg martin


Log in to reply