# Unsicher bei delete und delete[]



## KeiWaran (12. April 2004)

Hi leutz,

also ich bin mir momentan ein wenig unsicher bei delete und delete[].


```
int* a = new int[5];
for(int x=0; x<5; x++){
 cout << a[x] << endl;
}
delete[] a;  //freigeben
for(int x=0; x<5; x++){  
 cout << a[x] << endl;
}
```

also ich tus ausgeben dann löschen und alles nochmal ausgeben. jetzt weiß ich nicht genau ob wirklich der speicher wieder freigegeben wurde. denn beim zweitem mal werden die werte wieder ausgegeben..... 

liegts an mir?

Kei


----------



## basd (12. April 2004)

Zur Verwendung von delete:

Wenn man ein Objekt erstellt :

TYP_XY*  xy = new TYP_XY;
sagt man:
 delete   xy;

Hat man ein Array:

TYP_XY*  xy = new TYP_XY[500];

so sagt man:
delete [] xy;

Zu deinem Fall:

Also du gibst den Speicher frei mit deinem delete [], d.h. nur dass der Speicher bei einem neuen new oder malloc alociert werden kann nicht dass der Speicher auf Null oder sonst was gesetzt wird. Da der Speicher nur frei und nicht gelöscht wird sind deine Daten noch drin.

Achtung ! Bei sowas greift man auf nicht gültigen Speicher zu und sollte nie in der Art verwendet werden.
Am besten man macht nach jedem delete den Zeiger immer auf NULL.


----------



## oglimmer (13. April 2004)

Nur mal so als Tipp:

Ich verwende wo immer es geht SmartPointer in C++. Siehe z.B. hier http://www.boost.org/libs/smart_ptr/smart_ptr.htm


----------



## KeiWaran (13. April 2004)

*also*

ok habs kapiert. der speicher wird wieder freigegeben aber der inhalt nicht gelöscht.

also wärs am effektivsten wenn ich den Zeiger extra noch auf NULL setzte um nicht aus versehen drauf zuzugreifen.

@oglimmer Das mit SmartPointer kliengt interessant. gibts dazu auch ne deutsche anleitung?

Kei


----------



## KeiWaran (14. April 2004)

mich hat halt iritiert das ich immer noch drauf zugreifen konnte...
besonders bei Klassen...

Ich benutze momentan "MemCheck.h" aus Thinking in C++  um rauszufinden wo ein "Leak" sein KÖNNTE. Zeigt mir aber nicht wirklich wo was offen ist... vorschläge? oder besser ne andere Klasse oder Tool der das auch Checken kann?

wie gesagt das mit den SmartPointern klingt recht interesant....
  ähm nur wärs nicht schlecht wenns auf deutsch wär...

Kei


----------



## oglimmer (14. April 2004)

Also ich kenne keine deutsche Seite zur Boost-Lib, aber ich bin der Meinung, dass wenn man langfristig in der Software-Entwicklung gut sein will, dann muss man sich damit anfreunden, dass alle brauchbaren Artikel, Bücher, Webseiten in englisch sind. Je früher man das akzeptiert und sich das notwendige Wissen aneignet, desto besser.


----------



## Kachelator (14. April 2004)

Ja, Englisch ist schon ziemlich wichtig.

In "Mehr effektiv C++ programmieren" von Scott Meyers steht einiges über Smartpointers drin. Die "Effektiv"-Bücher von ihm sollte sich sowieso jeder C++-Programmierer zulegen. 

Du kannst auch mal nach "smartptr" googeln. Selbst auf ausschliesslich deutschen Seiten scheint es da eine Menge Lesestoff zu geben.


----------



## thekk (28. Januar 2010)

Der Einzige smart pointer im C++ Standart ist zur Zeit auto_ptr und dieser nutzt zur Zeit nur "delete" und nicht "delete[]"
Von daher ist er für die Nutzung von Arrays ungeeignet.

Erst 2010 soll der C++ Standart durch entsprechende smart pointer erweitert werden.


----------

