Pointer mit '= new typ[3]' initialiseren. Was bringts?
-
Hallo,
ich habe folgenden code:
int feld[3] = {1,4,6}; int *pFeld = new int[3]; //1 pFeld = feld; //1 int *p = feld; //2Macht es einen unterschied ob ich Variante 1 oder Variante 2 verwende? Konnte beim Zugriff auf das Array feld keinen erkennen. Nur sizeof auf die Pointer liefert bei 1: 64 und bei 2: 4.
-
Die Benutzung ist nicht anderst. Allerdings muss du dran denken dein Array, dass du per new geholt hast auch wieder richtig freizugeben.
Also per delete[]..
-
drakon schrieb:
Die Benutzung ist nicht anderst. Allerdings muss du dran denken dein Array, dass du per new geholt hast auch wieder richtig freizugeben.
Also per delete[]..
ok danke. Das heißt man sollte immer Variante 2 verwenden, da die kürzer ist?
Ich habe halt nicht verstanden warum es überhaupt möglich ist einen Pointer als Array zu initialisieren wenn er schlussendlich sowieso nur an eine Adresse zeigt.
-
maho15 schrieb:
ok danke. Das heißt man sollte immer Variante 2 verwenden, da die kürzer ist?
Pauschalaussagen sind immer falsch!
maho15 schrieb:
Nur sizeof auf die Pointer liefert bei 1: 64 und bei 2: 4.
Glaub' ich Dir nicht. Zeig den Code dazu.
greetz, Swordfish
-
Swordfish schrieb:
maho15 schrieb:
ok danke. Das heißt man sollte immer Variante 2 verwenden, da die kürzer ist?
Pauschalaussagen sind immer falsch!
maho15 schrieb:
Nur sizeof auf die Pointer liefert bei 1: 64 und bei 2: 4.
Glaub' ich Dir nicht. Zeig den Code dazu.
greetz, Swordfish
int feld[3] = {1,4,6}; int *pFeld = new int[3]; pFeld = feld; int *p = feld; std::cout << sizeof(pFeld) << '\n'; //Output: 64 std::cout << sizeof(p) << '\n'; //Output: 4Wenn meine Pauschalaussage falsch ist, wo steckt dann der Unterschied?
-
Es kommt hald darauf an, was du machen willst.
Du solltest dir im klaren sein, was die Nutzung von new/delete für einen Sinn hat.
Mit new kannst du Speicher beanspruchen, welcher solange gültig ist, bis du ihn freigibst. Das heisst, du kannst ihn in einer Funktion anfordern.
Im Gegensatz dazu brauchst du die "kürzere" Version für einen beschränkten Gültigkeitsbereich.EDIT:
Also ich bekomme 2 mal 4...
-
drakon schrieb:
Es kommt hald darauf an, was du machen willst.
Du solltest dir im klaren sein, was die Nutzung von new/delete für einen Sinn hat.
Mit new kannst du Speicher beanspruchen, welcher solange gültig ist, bis du ihn freigibst. Das heisst, du kannst ihn in einer Funktion anfordern.
Im Gegensatz dazu brauchst du die "kürzere" Version für einen beschränkten Gültigkeitsbereich.EDIT:
Also ich bekomme 2 mal 4...
Zuersteinmal nochmal klarstellung: es kommt beidesmal 4 bei sizeof raus. hatte einen anderen output dazwischen.
Ok, das mit new hab ich verstanden. Aber welchen Vorteil bringt mir das beim Pointer? Der Platzbedarf ist ja immer nur die Adresse.
Ob ich nun
int *pFeld = new int[1];
sage oder
int *pFeld = new int[99];bringt ja keinen Vorteil/Unterschied oder?
-
maho15 schrieb:
[cpp]int feld[3] = {1,4,6};
int *pFeld = new int[3];
pFeld = feld;
int *p = feld;
std::cout << sizeof(pFeld) << '\n'; //Output: 64
std::cout << sizeof(p) << '\n'; //Output: 4[/quote]
Dir ist schon klar, dass das nicht sein kann?typeof( pFeld ) == typeof( p ) == int*und ein Zeiger ist auf 32-bittern 4 Byte breit. 64 Byte sind's nur in äußerst, äußerst, unwahrscheinlich, außergewöhnlichen seltenen Fällen (fast schon nie...)
greetz, Swordfish
aja, zu deinem Dilemma:
Dynamische Speicherverwaltung
-
ok, danke.
Hab's kapiert hatte ein Denkfehler und dachte, dass ich über ein Pointer über new Speicherplatz reserviere, diesen selbst nicht als Array verwenden könnte sondern nur mit einem anderen Array zusammen..