在c中的两次执行之间故意改变随机存储器位置

Fel*_*Man 5 c memory

我有时想向学生们展示在使用之前必须初始化局部变量.但在某些情况下,它们在没有初始化的情况下得到零的初始值.所以我的学生不相信我.例如,在此代码中.

#include <stdio.h>

int main(void){
     int sum;
     sum += 5;
     printf("%d", sum);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

有时输出为5.为了演示未将变量sum初始化为零的未定义行为,我正在寻找一个例子.

vis*_*man 5

指向标准是好的.但我理解你希望向你的学生展示一个榜样.我不确定最好的方法; 但是为了增加查看未定义行为的机会,可以声明编译器无法轻易优化的多个变量.

#include <stdio.h>
void main(){
    int sum1;
    int sum2;
    int sum3;
    int sum4;
    int sum5;
    int sum6;
    int sum7;
    int sum8;
    int sum9;
    int sum=sum1+sum2+sum3+sum4+sum5+sum6+sum7+sum8+sum9;
    printf("%d\n",sum);
}
Run Code Online (Sandbox Code Playgroud)

在我的系统上; 最近的Ubuntu,最近的GCC在每次运行时产生不正确的结果,而你的原始示例总是产生5.但是我不能为你的系统做任何保证.