这个短短的片段
#include <new>
int main(){
while(true){
try{
new char[0x10000000];
}catch(std::bad_alloc bac){
}
}
}显然,当编译为64位应用程序并在64位Windows系统上运行时,整个操作系统就会崩溃。
这是一个有效的c++程序。怎么会发生这种事?这里的msvc编译器也有问题吗?
所有其他编译器/系统组合在最坏的情况下都使系统呆滞。
可别在家里尝试这些哟。用户克利斯朵夫在他的系统上尝试了这个,结果它崩溃了。
请评论:我对调试不感兴趣。这是一个有效的c++程序。我的代码没有错。我很好奇是什么导致了这种行为。
发布于 2015-03-25 23:40:25
“当应用程序使用大量内存时,蓝色屏幕”的一个相当合理的场景是一个崩溃的驱动程序。这里有两个共同的问题:
NULL返回的驱动程序“,从而导致空内存访问或接近空内存访问。对不起,自从我写windows驱动程序以来已经过去11年了,所以我们可以预料到的确切错误代码已经丢失了。我认为7B用于IRQLNotLessOrEqual,0xC00000005用于访问未映射内存(NULL访问等)。
许多机器具有相似的硬件(例如,相同的打印机、USB鼠标或键盘),可以很容易地解释几台不同机器的行为相同的事实。或光盘驱动器,是片状),或通过拥有相同的反病毒软件- AV软件总是有一个驱动组件,以“钩”到其他进程等。
考虑到“内存真的耗尽”现在已经不常见了,没有那么熟练的/经验丰富的/认真的开发人员很可能不会用假内存或内存不足的情况进行适当的测试,从而无法检测到他们的驱动程序在这种情况下失败了。
为了提供更多的细节,我们至少需要知道蓝屏的“代码”(屏幕顶部有四到五个十六进制数字)。
假设调试此类故障有一定的意义,您可以在转储(或迷你转储)崩溃时设置窗口,或者使用第二台PC将WinDBG作为远程调试器或其他远程调试器连接到正在崩溃的机器上--当机器出现蓝屏时,它将在重新启动之前停在调试器中,这样您就可以看到系统的状态,包括查看导致崩溃的代码的调用堆栈--这通常会显示导致问题的实际上是什么组件。但是,除非您与驱动程序开发人员有很好的联系(至少是给相关支持人员的电子邮件地址),否则不太可能解决这个问题。
https://stackoverflow.com/questions/29268147
复制相似问题