【发布时间】:2015-03-01 07:52:19
【问题描述】:
我在 Ubuntu 14.04 和 gcc 4.8.2 上使用 Hope 函数程序,并执行高度递归函数来查找大量素数。但是,我遇到了一个分段错误:0x000000000040e03f inreach
cell=<error reading variable: Cannot access memory at address 0x7fffff7feff8> at runtime.c:250
访问地址0x7fffff7feff8时出现分段错误。
reach 例程正在做的是取消标记当前表达式可以到达的堆项目(使用垃圾收集标记-清除)。堆栈很深(100000+ 次调用),但没有堆栈溢出:
base_memory = 0x7ffff35a4010
top_string = 0x7ffff35a5260
BaseHeap = 0x7ffff35a5260
heap = 0x7ffff603a450
stack = 0x7ffff72da498
TopStack = 0x7ffff7584d60
base_memory 到 TopStack 的区域是用 malloc 分配的。
每当我遇到段违规时,地址总是 0x7fffff7feff8,即使功能非常不同。
如果你 google 0x7fffff7feff8 有相当多的条目与此地址的段冲突,但没有解决问题。
我用代码检查堆地址是否在堆范围内,但从未失败。
我做了一个 gdb
find 0x7ffff35a4010,0x7ffff7584d60,0x7fffff7feff8
什么也没找到。
为什么地址0x7fffff7feff8 出现在这么多问题中?堆栈机制是否有问题,或者我需要以某种方式为平台更改代码?
【问题讨论】:
-
代码在哪里>(顺便说一句,我喜欢寻找大质数,你需要得到更多!)
-
我认为代码相当复杂。我要问的是存在某种模式或常见错误,因为错误地址 0x7fffff7feff8 在 google 上似乎出现了很多,并且使用 gdb 段违规没有意义。
-
在
valgrind下运行程序可能会提示问题出在哪里。如果您已经这样做了,请跳过此评论 :) -
我可能会在明天尝试 valgrind。谢谢。
标签: c segmentation-fault stack