指针摆动和分段错误
Dangling pointer and segmentation fault
下面是一个示例代码:
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指向的内存位置没有被其他对象(程序)分配时,不存在分割错误,对吗?如何解释
由于ptr从未初始化,它可能指向任何东西——代码、数据、堆栈、未映射的内存、已映射但不在使用范围内的内存。也就是说,ptr成员变量中的地址可能包含随机剩余数据、编译器或堆实现生成的特殊值,或者???
在大多数情况下,推理为什么在这些情况下出现或没有出现分段错误并不是特别有用或有意义。只是不要那样做。这是"未定义的行为",可以导致任意不可预测的事情发生。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?