Memorydump



  • Hallo,

    habe eine Funktion geschrieben, die einen Zeiger auf "irgendetwas" enthält und dann um diese Adresse den Speicher ausgibt.

    memorydump(unsigned char *ptr)
    

    Klappt auch wunderbar.

    float d = 3.55;
    
    memorydump(&d)
    

    Nun will ich vom Benutzer eine Eingabe bekommen, die einen Offset von dieser Speicherstelle angibt.

    do
        {
                printf("Offset ('455'=Ende): ");
                scanf("%d", &offset);
                memorydump(&d+offset);
        }
        while(offset!=455);
    

    Leider springt der immer "zuweit". Bei 1 als Eingabe sprngt er 4, bei 2 als Eingabe springt er 8.

    Woran kann das liegen,
    was mache ich falsch?



  • Hi,
    inkrementiert man den Zeiger eines Datenypen X um x, dann springt die Adresse um die Anzahl der Bytes dieses Datentypen weiter, also um xsizeof(X). Bei dir ist es vermutlich ein int.
    Du kannst statt int char d benutzen, dann erflogt eine Inkrementierung um 1 Byte, oder du castest nach char
    :

    (char*)&d+offset
    

    Gruß,
    B.B.


Anmelden zum Antworten