Beim debuggen wird von einem Buffer nur der Zeiger gezeigt



  • Hallo,
    wenn ich Speicher allociere

    char* buffer =new char[1000];

    wird beim Debuggen unter überwachte Ausdrücke immer nur der
    Zeiger von buffer angezeigt.
    Wie bekomme ich es hin, das ich mir den Inhalt anschauen kann?



  • Wie sieht der überwachte Ausdruck denn genau aus?



  • Jansen schrieb:

    Wie sieht der überwachte Ausdruck denn genau aus?

    char* buffer = new char[0xffff];
    Ausdruck: buffer:"6\x19\x01\x04\t", es ist Hexadezimal eingestellt.

    bei
    char* buffer = new char[1000];
    Ausdruck: buffer:"", es ist Hexadezimal eingestellt.

    bei
    char buffer[1000];
    Ausdruck: buffer:"\0\0\0\0\0......\0", was in dem Fall richtig ist.



  • Ich weiss nicht, was du erwartest.
    Bei der Speicherreservierung werden die Variablen mit Zufallswerten gefüllt. Sinnvolle bzw. garantierte Werte stehen dort erst nach der Initialisierung drin, d.h. nach der ersten Zuweisung.

    Nachtrag:
    "Werden" ist vielleicht falsch ausgedrückt, und "Zufall" ist wohl auch nicht ganz passend.
    Unmittelbar nach der Reservierung sind die Variablen mit dem gefüllt, was in dem Speicher stand, der gerade reserviert wurde.



  • Aber warum dann:

    char* buffer = new char[1000];
    Ausdruck: buffer:"", es ist Hexadezimal eingestellt.
    bei
    char buffer[1000];
    Ausdruck: buffer:"\0\0\0\0\0......\0", was in dem Fall richtig ist.
    und
    char* buffer=new char[1000];
    char index;
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    for(index = 0; index <100; index++)
    {
    buffer[index] = index;
    }
    }
    Ausdruck: buffer:"", es ist Hexadezimal eingestellt.



  • hermes,

    hermes schrieb:

    Ausdruck: buffer:"", es ist Hexadezimal eingestellt.

    buffer ist ein C-String. Beim ersten Schleifendurchlauf terminierst Du diesen durch die Zuweisung von 0 an die erste Position und das Watches-Fenster zeigt Dir das halt an. Setze doch mal einen Haltepunkt auf die Zeile "buffer[index] = index;" und beobachte die Variable im Watches-Fenster und/oder beginne Deine Schleife mit 1 statt 0.


Log in to reply