Простой вопрос про динамическую память, new/delete, C++ - Вопросы по С+

Вопрос Простой вопрос про динамическую память, new/delete, C++

Регистрация
31 Дек 2012
Сообщения
58
Репутация
1
Спасибо
0
Монет
0
При использовании delete не остаётся ли висячей ссылки? После этого не нужно указатель ставить в NULL?

Пример:

int* pointer=new int;

delete pointer;

//pointer=NULL; <--- нужна ли эта строчка?
 
Регистрация
3 Апр 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
Каждый раз при использовании указателя его следует проверять на валидность. Например,

void print(int* ptr, const size_t length) {
if (ptr != nullptr) {
for (auto i = 0U; i < length; ++i) std::cout << ptr << ' ';
puts("");
}
}

Если передать в функцию указатель, которому после освобождения памяти не был присвоен nullptr, вы получите ошибку времени выполнения связанную с нарушением доступа для чтения либо записи.

void fn(int* ptr) {
if (ptr != nullptr) *ptr = 8; // ошибка записи
}

// TODO:

auto ptr = new int;
delete ptr;
fn(ptr); // передача в функцию «битого» указателя
 
Регистрация
27 Дек 2013
Сообщения
92
Репутация
1
Спасибо
0
Монет
0
#include < iostream >

using namespace std;

int main(int argc, char** argv)
{
int* pointer = new int;

cout << pointer << endl;

delete pointer;
pointer = 0; // если так, то норм, а иначе вылет в ошибку, вот и делай сам выводы

cout << pointer << endl;

delete pointer;

return 0;
}
 

Похожие темы

Сверху Снизу