我遇到过两种错误,一种是分段错误,另一种是Stack smashing检测到的。我想知道它们之间有什么不同以及造成它们的不同原因。
答案 0 :(得分:7)
这通常是未定义的行为。
细分错误通常是在您的进程访问其无权访问的内存位置或该位置不存在时。
堆栈粉碎是一个警报(例如由gcc生成),用于警告例如堆栈上的边界访问。通常,当堆栈被写入不应该写入的位置时会发生这种情况 - 就像写入索引超出范围的本地数组一样。
您的代码中存在产生未定义行为的问题。也许您可以与我们分享,以便我们可以帮助您。
特别检查:
答案 1 :(得分:2)
答案 2 :(得分:1)
分段故障是由具有内存保护的硬件引发的故障,通知操作系统(OS)存储器访问冲突。当程序的调用堆栈中存在数据溢出时,会报告堆栈粉碎。通常程序的调用堆栈是固定长度的。
答案 3 :(得分:1)
两者都是内存访问冲突。 分段错误更为通用,意味着您正在访问不允许的内容。 堆栈粉碎更具体,意味着堆栈中存在错误。 实际上,堆栈粉碎会导致分段错误。 你可以参考: https://en.wikipedia.org/wiki/Segmentation_fault 要么 Stack smashing detected