@Pashka23

Почему работает разыменование пустого объекта?

Добрый день!
Почему работает этот код? trash это указатель, который указывает на мусор - по идее при вызове trash->f() должно упасть. Но f() успешно вызывается. Есть предположение, что функции глобальны и связываются с классами только через this.
struct A
{
	void f() { std::cout << "Hello, world!" << std::endl };
};

void main()
{
	A * trash;
	trash->f();
}
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
@towin
Указатель на объект действительно содержит мусор.
Но обращаясь таким образом к функции, вы как бы вызываете обычную функцию, которой передали в параметрах указатель this (который содержит мусор). Но т.к. функция this не использует, то и проблемы не возникает.
Попробуйте добавить член структуры и напечатать его в f() - все упадет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
A * trash = nullptr;
Приучайся инициализировать переменные с молоду :)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы