这是一个示例代码:
class IntWrapper
{
public:
IntWrapper(int value_ = 0): value(value_) {}
int getNumber()
{
return value;
}
void setNumber(int value_)
{
value = value_;
}
private:
int value;
};
class T
{
public:
T(){}
void test()
{
std::cout << ptr->getNumber() << std::endl;
ptr->setNumber(10);
std::cout << ptr->getNumber() << std::endl;
}
private:
IntWrapper *ptr;
};
int main( int argc, char* argv[] )
{
T t;
t.test(); // may cause segmentation fault
return 0;
}
ptr 那是一个悬空指针。当我运行该程序时,它会打印:
1
10
但它也可能导致分段错误(即使只调用了一个读取内存的函数 - getNumber)。
- 当 ptr 指向的内存位置没有被其他对象(程序)分配时,没有分段错误,对吧?怎么解释?