Anlegen und Freigeben v0n Speicher



  • asdasd schrieb:

    Aber er legt auch keine Array mit 6 Elementen an.
    Warum nicht? Was mache ich da falsch?

    Woran siehst du das?



  • _matze schrieb:

    asdasd schrieb:

    Aber er legt auch keine Array mit 6 Elementen an.
    Warum nicht? Was mache ich da falsch?

    Woran siehst du das?

    Breakpoint gesetzt und halt mit dem Debugger nachgeschaut, was für Variabeln erstellt wurden.

    Wenn ich im Code ganz normal

    int Lotto2[6];
    

    hinzufüge, legt er für Lotto2 .. 6 Elemente an.

    Aber das mit dem anderen klappt leider nicht.



  • Das liegt daran, dass du mit new halt kein Array deklariert hast, sondern einen Speicherbereich von 6 aufeinanderfolgenden int's reserviert und die Adresse des ersten Elements deinem int-Zeiger zugewiesen hast. Du kannst aber ganz normal mit operator[] darauf zugreifen.

    EDIT: Störe dich nicht an den Unzulänglichkeiten des Debuggers. 😉

    Übrigens, falls du das Visual Studio benutzt: du kannst den int-Zeiger in das Überwachungsfenster ziehen (Drag&Drop, oder selbst eingeben) und dahinter ",6" eingeben. Dann werden dir dort alle 6 Elemente angezeigt.



  • _matze schrieb:

    Das liegt daran, dass du mit new halt kein Array deklariert hast, sondern einen Speicherbereich von 6 aufeinanderfolgenden int's reserviert und die Adresse des ersten Elements deinem int-Zeiger zugewiesen hast. Du kannst aber ganz normal mit operator[] darauf zugreifen.

    EDIT: Störe dich nicht an den Unzulänglichkeiten des Debuggers. 😉

    Übrigens, falls du das Visual Studio benutzt: du kannst den int-Zeiger in das Überwachungsfenster ziehen (Drag&Drop, oder selbst eingeben) und dahinter ",6" eingeben. Dann werden dir dort alle 6 Elemente angezeigt.

    Also bei mir wird das hier angezeigt:
    http://img196.imageshack.us/i/screenxp.jpg/



  • Ich sagte ja, du sollst "Lotto,6" eingeben...



  • Ich sehe in dem Screenshot nirgends ",6".



  • _matze schrieb:

    Ich sagte ja, du sollst "Lotto,6" eingeben...

    Habs erst mit Drag&Drop versucht.
    Aber nun gehts. Danke

    Also das man das für Arrays braucht, hab ich verstanden aber was mir immer noch nicht ganz klar ist:

    z.B.
    int *intZeiger = new int(2);

    Wann brauch ich sowas?

    Also ich kann doch genau so gut

    int abc = 2;

    schreiben?!
    Würde mich über ein Beispiel freuen, wo man auch ne "normale" Variabel mit new anlegen sollte



  • ASDasd schrieb:

    Habs erst mit Drag&Drop versucht.

    Auch bei der D&D-Variante habe ich gesagt, dass du ",6" dahintersetzen musst... :p



  • _matze schrieb:

    ASDasd schrieb:

    Habs erst mit Drag&Drop versucht.

    Auch bei der D&D-Variante habe ich gesagt, dass du ",6" dahintersetzen musst... :p

    Ja ok 😛 Hast gewonnen 😛

    Also das man das für Arrays braucht, hab ich verstanden aber was mir immer noch nicht ganz klar ist:

    z.B.
    int *intZeiger = new int(2);

    Wann brauch ich sowas?

    Also ich kann doch genau so gut

    int abc = 2;

    schreiben?!
    Würde mich über ein Beispiel freuen, wo man auch ne "normale" Variabel mit new anlegen sollte



  • asdasd schrieb:

    Würde mich über ein Beispiel freuen, wo man auch ne "normale" Variabel mit new anlegen sollte

    Normalerweise musst du das auch nicht. Mir fällt spontan der Fall ein, dass man ein sehr großes struct instanziieren will, das den Stack gefährlich füllen würde. Ich hatte mal so einen Fall. Ein struct von ca. 600-700KB Größe (war ein Riesen-LUT drin) ist beim Standard-Stack von 1MB nicht so toll. 😉



  • _matze schrieb:

    asdasd schrieb:

    Würde mich über ein Beispiel freuen, wo man auch ne "normale" Variabel mit new anlegen sollte

    Versuch mal, nur mit automatischen Variablen eine beliebige Anzahl beliebig langer Zeilen einzulesen. Beliebig heisst, dass Anzahl und Länge vorher nicht bekannt sind.


Anmelden zum Antworten