Задать вопрос
@Pashka23

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

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

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

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

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