DAMAGE AFTER NORMAL BLOCK



  • Hallo Forum,

    wenn ich diesen Code starte erhalte ich die Fehlermeldung das Speicher beschrieben wurde der nicht beschrieben werden darf:

    #include "stdafx.h"
    #include "windows.h"
    #include "malloc.h"

    int main(int argc, char* argv[]) {
    const char *sConst="Hossa";
    char *sStr;

    sStr = (char *)malloc(sizeof(sConst)+1);
    //strncpy(sStr, sConst, sizeof(sConst)+1);
    strcpy(sStr, sConst);
    free(sStr);
    return 0;
    }

    Warum passiert der Fehler erst beim free() Befehl (nicht beim Stringkopieren)? Und es passiert nur wenn ich strcpy benutze. Mit der auskommentierten Funktion geht es.

    Der Klenk



  • Der Klenk schrieb:

    Warum passiert der Fehler erst beim free() Befehl (nicht beim Stringkopieren)?

    weil der heapmanager erst da bemerkt, dass du seine strukturen zerschossen hast.
    beim stringkopieren merkt er's nicht, weil's kein read-only speicher ist und daher schreibzugriffe prinzipiell erlaubt sind...
    🙂



  • 1. Das ist der Spass an undefiniertem Verhalten - es ist nicht garantiert wo (oder dass überhaupt) ein Fehler auftritt.
    2. strncpy begrenzt die Anzahl Zeichen auf denselben Wert der eine Zeile höher angefordert wurde - hier KANN garnichts kaputtgeschrieben werden.
    3. Erkundige Dich danach was sizeof (nicht) tut, und vgl. strlen



  • WAAAAHHH!
    Hab schon lange nicht mehr C programmiert...

    Vielen Dank Euch beiden 🙂


Log in to reply