Merkwürdiges Verhalten bei calloc/realloc



  • Hallo,

    schaut euch mal die folgende Codesequenz an:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(int argc, char argv[])
    {
    char
    p;
    p = malloc(21);
    if(p == NULL)
    {
    printf("Fehler bei Belegung!");
    exit(1);
    }
    strcpy(p,"Dies sind 20 Zeichen");
    printf(p);
    p=realloc(p,22);
    if(p == NULL)
    {
    printf("Belegungsfehler!");
    exit(1);
    }
    strcat(p,".");
    printf(p);
    free(p);

    getchar();

    return 0;
    }

    Das Programm funktioniert einwandfrei, aber wenn ich z.B. bei malloc
    nur den Wert 15 eingebe, werden trotzdem die 20 Zeichen korrekt eingelesen.
    Andersherum, wenn ich mit realloc einen kleineren Wert angebe, etwa 10, um Zeichen abzuschneiden, bekomme ich immer konstant die ersten 16 Zeichen
    ausgegeben, egal welchen Wert ich bei realloc angebe.
    Ich arbeite mit Dev-C++.
    Woran kann das liegen (fehlerhafte Implementierung beim Compiler??)

    Vielen Dank schon mal



  • Salut,

    mit diesen Methoden wird nur Speicher auf dem Heap reserviert, jedoch kannst du damit keine String kürzen. Du überschreibst praktisch irgendeinen Teil im Speicher, deine Treffer sind Zufälle.
    Könnte auch sein dass dein Programm abschmiert wenn du größere String kopierst.

    Wenn du an der gewünschten Position '\0' einfügst hackst du den String damit ab.

    Mfg

    GPC


Anmelden zum Antworten