operating-system - 可以切换虚拟机修复 *** 检测到堆栈粉碎 ***
问题描述
我一直在为我的操作系统类工作的调度程序在我正在使用的虚拟机上收到“***堆栈粉碎检测到***”错误(我正在使用带有 virtualbox 的 Vagrant)。这个错误发生在我运行程序的大约 50% 的时间里。当切换到我们教授提供的VM集群时(在上述VM上使用SSH连接),错误从未出现过。
我的第一直觉是我的本地虚拟机没有分配足够的内存,而且我正在运行的代码不知何故超出了我的虚拟机可以访问的范围。(测试涉及在自己的线程中执行 128 个不同大小的矩阵乘法)
谁能确认这是否是一个可行的解释?我担心错误只是在另一个VM上被忽略(我对使用标志-g和-lm编译的两者都使用相同的makefile)。谢谢!
解决方案
当您的程序覆盖其局部变量所在区域上方的“金丝雀”内存时,会导致检测到堆栈粉碎。这通常是由于写入的本地数组元素多于为其分配的元素。没有错误的程序不应该在任何机器上执行此操作,无论可用内存有多少或有多少。所以你的程序有问题,需要修复。
特别是,这个错误不是简单地用完堆栈空间引起的。
很可能其他 VM 将其编译器配置为默认禁用此检查。您可以使用 重新启用它-fstack-protector
。但无论哪种方式,您都应该在任何一台允许您重现它的机器上调查并修复此错误。
推荐阅读
- regex - 仅提取第一次出现的搜索字符串并忽略 / 之后的所有内容
- ios - 在 x 代码 10.1 中将 pod 更新到 FBSDK 5.0.0 后出现错误
- javascript - 如何在 saga 中处理多个依赖请求?
- angular - 具有不同负载的角度。如何将专用 Polyfills 添加到 es5 或 es2015 输出包
- apache-nifi - Apache NiFi 与 Informatica
- inno-setup - 我们可以让 DwinHs Inno Setup 下载插件运行得更快吗?
- angular - 无限循环生效
- c++ - WS_EX_TOOLWINDOW 工具窗口无法按预期工作
- json - 快速搜索字典值中的值
- asynchronous - 使用异步编程将电子邮件发送到单个 smtp 服务器是否有意义?