Operating system 切换虚拟机能否修复检测到的***堆栈崩溃***

Operating system 切换虚拟机能否修复检测到的***堆栈崩溃***,operating-system,virtual-machine,stack-smash,Operating System,Virtual Machine,Stack Smash,我一直在为我的OS类工作的调度程序在我使用的VM上收到了一个“***stack smashing detected***”错误(我将Vagrant与virtualbox一起使用)。这个错误大约在我运行程序的50%时间发生。 当切换到我们的教授提供的VM集群(在前面提到的VM上使用SSH连接)时,错误从未出现 我的第一直觉是,我的本地VM没有足够的内存分配给它,而且不知何故,我正在运行的代码超出了我的VM可以访问的范围。(该测试涉及在各自的线程中执行128个不同大小的矩阵乘法) 有人能证实这是一个

我一直在为我的OS类工作的调度程序在我使用的VM上收到了一个“***stack smashing detected***”错误(我将Vagrant与virtualbox一起使用)。这个错误大约在我运行程序的50%时间发生。 当切换到我们的教授提供的VM集群(在前面提到的VM上使用SSH连接)时,错误从未出现

我的第一直觉是,我的本地VM没有足够的内存分配给它,而且不知何故,我正在运行的代码超出了我的VM可以访问的范围。(该测试涉及在各自的线程中执行128个不同大小的矩阵乘法)

有人能证实这是一个可行的解释吗?我担心的是,这个错误在另一个VM上被忽略了(我使用同一个makefile来编译带有-g和-lm标志的文件)。 谢谢

是在程序覆盖位于其局部变量所在区域上方的“金丝雀”内存时引起的。这通常是由于写入的本地数组元素比分配给它的元素多。一个没有bug的程序应该永远不要在任何机器上执行此操作,无论可用内存有多大或多小。因此,您的程序有缺陷,需要修复

特别是,这个错误不是由堆栈空间不足引起的

很可能另一个VM的编译器配置为默认禁用此检查。您可以使用
-fstack protector
重新启用它。但无论哪种方式,您都应该在任何允许您复制该错误的机器上调查并修复该错误