c++代码中的分段错误
Segmentation fault in c++ code
我有一个c++代码,它最近开始抛出分段错误。我知道这个问题是由于未初始化的指针造成的。但我怀疑为什么这个代码突然开始抛出seg错误。自2010年以来,此代码没有更改。是否可能在不对代码进行任何更改的情况下出现分段故障?这是代码:
void COB :: processfile()
{
ofstream *pbm_ptr; //uninitialiased ptr
..
while(currentRecord,readLine(_cobstream, FALSE))
{
...
if(_cobvalues[POS_REC_TYPE] == DETAIL)
{
pbm_ptr = null; //initialising
...
}
else
{
if(pbm_ptr != NULL)
*pbm_ptr << currentRecord(0,RECORD_LENGTH) << endl; //segmentation fault
..
}
我想再补充一点,在我出现分段错误后,如果我用相同的输入文件再次运行相同的可执行文件,第二次运行不会有任何错误。有人能告诉我造成这种结果的原因吗?
当然,分段错误可能会发生,即使以前没有发生过。
首先,您可能因为一些未定义的行为而产生SEGV,这在一般情况下是不可复制的。UB可能真的很顽皮。
然后,支持的C++库可能已经更改,环境可能不同(因此main
开始时的堆栈可能不同)
最后,像ASLR这样的东西使得指针地址不可复制。
如果在Linux上,您可以禁用ASLR,使用所有警告和调试信息(g++ -Wall -Wextra -g
)编译代码,也许使用-fsanitize=address
,使用valgrind,当然还有gdb
调试器(例如,用于死后核心(5)转储分析)。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?