Verständnisfrage
-
struct Test { DynamicArray<int> DA; }; void __fastcall TForm1::Button1Click(TObject *Sender) { Test good; good.DA.set_length(1); //ohne Probleme Test* bad; bad->DA.set_length(1); //gibt AccessViolation zur Laufzeit }Warum geht das nicht mit dem Zeiger auf die Struktur? Kann mir das jemand bitte erklären?
-
Hallo
war da nichtmal was mit new/delete

(Grundlagen !!)MfG
Klaus
-
aber mit Test* bad erzeuge ich doch eine Instanz auf die Strukur
-
Hallo
nein, sondern einen Zeiger, der auf eine Instanz zeigen kann.
Schau dir ein Tutorial zu den beiden Stichworten an, die KlausB genannt hat.bis bald
akari
-
apo schrieb:
aber mit Test* bad erzeuge ich doch eine Instanz auf die Strukur
Damit hast du nur einen Zeiger erstellt, der auf den Speicherbereich zeigt den die Instanz nach Erstellung benutzen soll.
test *TTest = new TTestErst jetzt hast du den Speicher alloziert.
MfG,
MastaFlasH
-
Hallo
aber bitte das delete nicht vergessen. Jeder dynamisch angeforderte Speicher muß auch wieder nach Gebrauch freigegeben werden.
bis bald
akari
-
Also ohne new wird nur eine Adresse auf dem Stack gelegt und mit new wird zusätlich noch Speicher auf dem Heap reserviert, oder wie?
-
Bei new wird nur Platz für den Zeiger reserviert. Eine Instanz des Objektes mußt Du mit new selbst erzeugen und dem Zeiger zuweisen.