为什么从未初始化数组印刷崩溃我的电脑? [重复]

问题描述 投票:0回答:1

这个问题已经在这里有一个答案:

我在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;
}
arrays c++11 stdio
1个回答
2
投票

这是未定义的行为(1),从字面上什么是不允许发生的,直至并包括宇宙的早期热死。

就算它是实际的计算机蓝屏非常不寻常的,所以你可能要考虑的可能性,这是不相关的(除非你可以复制它当然)。

但是,如前所述,不做UB。还有一个原因,第一个单词是“未定义” :-)


(1)作为一个例子,浮点值被允许有陷阱位,这意味着任意的解引用变量未初始化实际上可能导致UB。

短期通过标准曳的,可能还有其他的情况下,UB出来的你定的代码。我只是没有倾斜度做就是代码应该可能永远也看不到光明的一天:-)

但是,在任何情况下,即使它不是UB,它仍然是一个糟糕的主意,因为你可能也只是打印出了很多任意浮点值。

© www.soinside.com 2019 - 2024. All rights reserved.