#include <iostream>
class C
{
private:
int *o;
public:
C(int &i) { *o = i;}
int* get_val() {return o;}
};
int main()
{
int t = 9;
C c(t);
int* p = c.get_val();
std::cout<<*p<<std::endl;
int* h = c.get_val(); //seg fault
std::cout<<*h<<std::endl;
int f = 25;
C g(f);
int* q = g.get_val(); //seg fault
std::cout<<*q<<std::endl;
return 0;
}
В классе C есть два объекта: 'c' и 'g'. Возврат указателя частной переменной работает нормально в первый раз, но при повторном вызове это приводит к ошибке seg. Почему это так?
Итак, я закомментировал второй вызов и попытался создать новый объект, а вызванный попытался вернуть указатель частной переменной. Несмотря на то, что 'g' является другим объектом класса C, его возврат приводит к ошибке сегментации. Почему это так?
C(int &i) { *o = i;}
Это демонстрирует неопределенное поведение путем разыменования неинициализированного указателя. Возможно, вы имели в видуo = &i;
. Демо - person Igor Tandetnik   schedule 20.11.2016