我在程序集中编写了一个程序,并且它随机出现了段错误,而我从gdb得到的就是这个。知道为什么吗?我不是在寻找关于我的代码的具体答案,而是整个gdb。为什么这么说? ()我环顾网络,似乎无法在任何地方找到这个发布的另一个实例。它通常不会告诉我它在哪个功能吗?
Program received signal SIGSEGV, Segmentation fault.
0x53f63156 in ?? ()
答案 0 :(得分:0)
这已经很久了,但我想:
编程接收信号SIGSEGV,分段故障。 您正在尝试访问为您保留的范围之外的内存。 (坏指针)
此:
0x53f63156在? ()
可能试图说,您尝试访问的非法内存地址是0x53f63156 和“??”意味着没有给出访问发生的例程的名称 - 或者至少在符号表中找不到它。
答案 1 :(得分:0)
编程接收信号SIGSEGV,分段故障 0x53f63156在? ()
通常这意味着您的程序跳转到无效地址。
常见原因:
在前两个中,(gdb) where
应该仍然可以告诉你你是如何到达那里的。
在上一篇文章中,您可能必须使用工具(例如address sanitizer)来告诉您溢出发生的位置(地址清理程序或Valgrind也是调试其他原因的首选工具)。 / p>
P.S。你的指针0x53f63156
看起来像是ASCII:" S.1V" (其中'。'是0xF6)。如果您的程序处理类似' S.1V'等字符串,则堆栈溢出很可能是原因。