Мне интересно, как удалить оператор [] в C++. (Я использую Visual Studio 2005).delete [] и утечки памяти
У меня есть неуправляемая DLL, вызываемая управляемой DLL. Когда я закрываю эту программу после выполнения нескольких задач во время отладки, я получаю много (тысяч?) Утечек памяти, в основном 24 байта - 44 байта. Я подозреваю, что это может быть связано с некоторой неуправляемой DLL, которую я имею.
Во всяком случае, от того, что я понимаю, если у меня есть следующий код:
char* pointer = new char[500]
/* some operations... */
delete[] pointer;
Тогда вся память для него освобождается правильно, я прав?
Что происходит, когда у меня есть следующий код:
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;
память, на которую указывает указатель будет удален правильно? Таким образом, это означает, что pointerIt теперь не указывает на действительную память. Но это нормально, потому что я могу установить оба указателя в NULL, не так ли?
Во всяком случае, то, что происходит сейчас, если я это сделать:
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...
Будет ли этот код удалить блок памяти, на которую указывает pointerIt до pointerIt +500? или он удалит блок памяти, на который указывает pointerFirstPos, указателюFirstPos +500?
Может ли это привести к утечке памяти?
Извините за длинное сообщение, я пытаюсь четко разобраться в своем сообщении.
Спасибо,
Кребса
«Но это нормально, потому что я могу установить как указатели на NULL, не так ли?» Ну, вы должны сделать это с указателями ... – GManNickG