制作一个for(EVER)循环.系统不想启动

Hyd*_*oid -2 c++ arrays for-loop

我在C++中创建了这样的代码:

int main() {
    int myArray[5];
    int n =1;
#define EVER ;;
    for(EVER){
       myArray[n] +=n++;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我让它运行,我得到一个blueScreen.在此之后我的电脑不想启动.我做错了什么?我是C++的新手.谢谢

Ben*_*ley 5

你的程序充满了令人印象深刻的未定义行为,因为它太小了.未定义的行为意味着,就C++标准而言,程序的行为是不可确定的.换句话说,就C++标准而言,任何事情都可能发生.

int myArray[5];
Run Code Online (Sandbox Code Playgroud)

在此声明中,您已经保留了myArray未初始化的值.虽然这本身并不是未定义的行为,但是当您在写入这些值之前尝试读取这些值时,就会这样做.

myArray[n] += n++;
Run Code Online (Sandbox Code Playgroud)

这个语句本身没有其他上下文,是未定义的行为.未指定是先评估nin myArray[n]还是先评估in n++.换句话说,这两个表达式相互之间没有相应的顺序.一个是读取值n,另一个是修改它.读取变量的值并在没有插入序列点的情况下修改它是未定义的行为.

最后,假设上面的代码以您期望的方式运行,您将永远循环,不断递增n.一旦n达到5,您就不再有权读取或写入这些位置myArray.一旦n达到6,您就不再拥有参考这些位置的权限.这样做是更未定义的行为.

我描述的前两个问题,虽然它们很糟糕,但实际上它们很可能不会导致你所看到的那种行为(至少不是它自己).第三个是写入数组末尾之外的内存位置,这很可能是您所看到的主要错误的罪魁祸首.