我得到分段错误,访问一个在gdb中看起来有效且完全可访问的对象。分段是不是总是关于无法访问的内存?
编辑:更多细节。
崩溃发生在gdb下,所以我可以检查对象的内存。它将成员设置为正确的值,因此我无法访问只读内存。崩溃发生的指令有点Var = Obj.GetMember()
,其中Var,GetMember和相应的成员是短整数。
错位?我想这会导致总线错误,而不是分段。我会尝试重建所有。问题是这段代码每秒运行数千次,分段在几天内发生一次。
答案 0 :(得分:2)
即使在某些情况下访问“有效”内存,也会出现错误:
不看coredump,弄清楚故障指令(加载/存储/执行)是什么,以及访问内存的映射权限究竟是什么,这是不可能区分的。
答案 1 :(得分:2)
尝试完全重建(make clean&& make),当我遇到如此奇怪的错误时,这曾帮助了我几次。
晚UPD:
如果这确实解决了问题,通常意味着makefile出现问题,通常是.cpp和.h文件之间的依赖关系,例如:a.cpp包含bh,但是bh没有列在.cpp的依赖关系。
答案 2 :(得分:0)
基本上,是的。您是否使用核心转储来分析seg故障?
答案 3 :(得分:0)
代码非常有帮助,但你做过干净吗?如果你增加了一个类的大小并且你的依赖关系不正确,那么就没有足够的空间分配给一个实例,那么该类将会溢出并破坏它在内存中的任何内容。