Ist delete[] gleich löschen?

IP_ADAPTER_INFO *ptr=new IP_ADAPTER_INFO[100];

wenn ich kostenlos mit

delete ptr;

wird es zu Speicherverlust führen, wenn nicht, dann warum ?

Dies ist disassembly-code generiert VS2005

; delete ptr;
0041351D  mov         eax,dword ptr [ptr] 
00413520  mov         dword ptr [ebp-0ECh],eax 
00413526  mov         ecx,dword ptr [ebp-0ECh] 
0041352C  push        ecx  
0041352D  call        operator delete (4111DBh) 
00413532  add         esp,4 

; delete []ptr;
00413535  mov         eax,dword ptr [ptr] 
00413538  mov         dword ptr [ebp-0E0h],eax 
0041353E  mov         ecx,dword ptr [ebp-0E0h] 
00413544  push        ecx  
00413545  call        operator delete[] (4111E5h) 
0041354A  add         esp,4 
  • Was haben die docs gesagt?
  • ich habe gelesen , dass der Destruktor aufgerufen wird, werden für das erste element im array, sondern ganze Speicher wird freigegeben, gleiche ich sehe beim Debuggen
  • Nein, nur das erste element wird freigegeben, andere nicht.
  • Nein, das ist nicht sicher. Kann es passieren, dass Weg, aber dann ist es vielleicht nicht. Für Hülsen, es ist sogar wahrscheinlich, dass es vielleicht nicht. Aber man weiß ja nie.
  • Was wird passieren, wenn IP_ADAPTER_INFO aufhört zu POD-Typ? Wollen Sie Bearbeiten den code? Sie versehen Ihre Frage mit C++ tag, so sollten Sie überlegen, mit std::vector.
  • Ich empfehle das ignorieren dieser Frage und statt zu Lesen [delete vs delete[]](stackoverflow.com/questions/4255598/delete-vs-delete) statt, deren Antworten sind viel mehr auf den Punkt.

InformationsquelleAutor Satbir | 2009-10-12
Schreibe einen Kommentar