gpt4 book ai didi

c - 检测到的段错误和堆栈粉碎之间的区别

转载 作者:太空狗 更新时间:2023-10-29 15:15:52 24 4
gpt4 key购买 nike

我遇到过两种错误,一种是段错误,另一种是检测到 Stack smashing。我想知道它们之间有什么不同以及导致它们的不同原因。

最佳答案

这通常是未定义的行为。

  • 段错误通常是当您的进程正在访问它无权访问的内存位置,或者该位置不存在时。

  • Stack smashing 是一种警报(例如由 gcc 生成),用于警告访问越界,例如,在堆栈上。通常,当堆栈被写入不应写入的位置时会发生这种情况,例如本地数组写入超出范围的索引处。

  • Stack overflow 是一种“stack smashing”,也可能触发此警报。堆栈溢出通常发生在为堆栈分配的内存不足以容纳函数局部变量、返回地址时……通常发生在递归函数太深(返回地址和局部数据累积太多)中。或者如果局部变量在堆栈中占用太多空间(如巨大的数组)。

您的代码中存在产生未定义行为的问题。也许您可以与我们分享,以便我们为您提供帮助。

特别检查:

  • 越界访问
  • 空指针
  • 局部变量的大小太重要了;这些变量应该存储在堆中,或者动态分配(malloc() ...)。

关于c - 检测到的段错误和堆栈粉碎之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35169877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com