@ZaHaR_35

В чем разница между delete и nullptr?

Почему если в c++ создать указатель на char, потом скопировать этот указатель, то если удалить его, значение скопированного указателя будет не определено, а если сделать начальный указатель nullptr, то скопированный указатель будет иметь первоначальное значение?
Вот пример:
char* g = new char[10];
	strcpy_s(g, 6, "hi");
	char* gg = g;
	g = nullptr; // Здесь всё нормально, но если сделать delete[] g, то будет неопределенное поведение
	std::cout << gg;
  • Вопрос задан
  • 274 просмотра
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
g = nullptr не удалаят память, оно просто записывает в переменную g значение со смыслом - "указатель вникуда". Память при этом остается нетронутой и к ней можно обращаться, что вы и делаете, запомнив указатель в другой переменной.

delete[] же освобождает память, а значит, все последующие обращения к ней, что при помощи g, что при помощи gg - будут вызывать UB
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
В С++ тебе нужно понять истину: никакого garbage collector не существует!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы