Unsicher bei delete und delete[]

KeiWaran

Grünschnabel
Hi leutz,

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

Code:
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
 
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.
 
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
 
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....
:rolleyes: ähm nur wärs nicht schlecht wenns auf deutsch wär...

Kei
 
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.
 
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.
 
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.
 
Zurück