Ich wundere mich über den Operator löschen [] in C++. (Ich verwende Visual Studio 2005).löschen [] und Speicherlecks
Ich habe eine nicht verwaltete DLL, die von einer verwalteten DLL aufgerufen wird. Wenn ich dieses Programm schließe, nachdem ich beim Debuggen ein paar Aufgaben ausgeführt habe, bekomme ich viele (tausende?) Speicherlecks, meistens 24 Bytes - 44 Bytes. Ich vermute, dass es an einer bestimmten nicht verwalteten DLL liegt, die ich habe.
Wie auch immer, von dem, was ich verstehe, wenn ich den folgenden Code haben:
char* pointer = new char[500]
/* some operations... */
delete[] pointer;
Dann gilt für sie alle der Speicher richtig befreit wird, bin ich richtig?
Was passiert, wenn ich den folgenden Code haben:
char* pointer = new char[500];
char* pointerIt = pointer;
/* some code perhaps to iterate over the whole memory block, like so */
for (int i = 0; i < 250; i++){ // only iterate halfway
*pointerIt = 0;
pointerIt++;
}
delete[] pointer;
Der Speicher nach rechts durch den Zeiger gezeigt wird gelöscht? Das bedeutet, dass pointerIt jetzt nicht auf gültigen Speicher zeigt. Aber das ist in Ordnung, weil ich beide Zeiger auf NULL setzen kann, oder?
Wie auch immer, was passiert jetzt, wenn ich dies tun:
char* pointerFirstPosition = new char[500];
char* pointerIt = pointerFirstPosition;
for (int i = 0; i < 250; i++){ // only iterate halfway
*pointerIt = 0;
pointerIt++;
}
delete[] pointerIt; // delete the pointer iterator...
Wird von pointerIt bis zu pointerIt +500 den Speicherblock wies auf diesen Code löschen? Oder wird der Speicherblock gelöscht, auf den pointerFirstPos auf pointerFirstPos +500 zeigt?
Könnte dies zu einem Speicherleck führen?
Entschuldigung für die langatmige Nachricht, ich versuche, meine Botschaft klar zu vermitteln.
Danke,
kreb
„Aber das ist okay, weil ich beiden Zeiger auf NULL gesetzt, nicht wahr?“ Nun, Sie sollten mit den Zeigern fertig sein ... – GManNickG