这个问题已经在这里有一个答案:
我在Windows上运行10我瞎搞一些C ++ Cygwin和运行这个代码一堆倍。我的笔记本电脑变成反应迟钝,几秒钟后,我得到了蓝屏,不得不重新启动。事情是,我做的是从内存和打印阅读到stdout,这应该不会造成这一点。我查了一下,和数组的大小不超过cygwin的最大堆栈大小。
#include <stdio.h>
int main (){
double a[6675];
int i = 0;
while (i<6675){
printf("%f\n", a[i]);
++i;
}
return 0;
}
这是未定义的行为(1),从字面上什么是不允许发生的,直至并包括宇宙的早期热死。
就算它是实际的计算机蓝屏非常不寻常的,所以你可能要考虑的可能性,这是不相关的(除非你可以复制它当然)。
但是,如前所述,不做UB。还有一个原因,第一个单词是“未定义” :-)
(1)作为一个例子,浮点值被允许有陷阱位,这意味着任意的解引用变量未初始化实际上可能导致UB。
短期通过标准曳的,可能还有其他的情况下,UB出来的你定的代码。我只是没有倾斜度做就是代码应该可能永远也看不到光明的一天:-)
但是,在任何情况下,即使它不是UB,它仍然是一个糟糕的主意,因为你可能也只是打印出了很多任意浮点值。