Du bist nicht angemeldet.

Werbeanzeige

NoName

Treue Seele

  • »NoName« ist der Autor dieses Themas

Beiträge: 118

Beruf: Student

  • Private Nachricht senden

1

15.10.2003, 21:02

Zerstörung einzelner Elemente eines mit new erzeugten Feldes

Quellcode

1
2
3
4
5
6
7
8
9
10
int* Pointer = new int[5];

delete &Pointer[3];
delete &Pointer[4];

int Size = sizeof (Pointer) / sizeof (int);
//Wie groß ist Size hier?

delete[] Pointer;
//Was passiert mit diesem Aufruf?

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

15.10.2003, 22:56

Hi,

also ich hab zwar den dazugehörigen Text net gefunden (na wo issa denn? ;D) aber egal:

Wenn du ein Array per new erstellst wird es auch immer die selbe größe haben, nur du kannst die einzelnen einträge Freigeben, aber sie sind trotzdem da, jedoch leer.

Ich glaube auch deine berechnung ist Falsch, ich glaube es musste so heißen:

size_t ArraySize = sizeof(Pointer[0])/sizeof(int);

Die antwort ist dann 5, da nur die einträge ausgegeben werden.

Wenn du delete [] Pointer; aufrufst werden meines wissens alle restlichen einträge gelöscht, sofern ich aber auch weis gehört diese Definition nicht zum Standard, drum kann es sich der Compiler aussuchen. (also nur mit Vorsicht zu genießen :))

Kann mich irren aber ich kann mich noch gut daran erinnern es letzte woche irgendwo gelesen zu haben in der Bücherrei :)

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

3

15.10.2003, 23:38

Es wird nicht 5 ausgegeben sondern 1:

sizeof(Pointer[0]) oder sizeof(Pointer)
ist in beidenfällen 4 byte da 1 int 4 bytes groß ist.
sizeof kann man nur bei statischen buffern benutzen.

Werbeanzeige