在 c 中的两次执行之间故意更改随机内存位置

标签 c memory

有时我想告诉我的学生局部变量必须在使用前进行初始化。但在某些情况下,它们会在未初始化的情况下获得初始值零。所以我的学生不相信我。例如在这段代码中。

#include <stdio.h>

int main(void){
     int sum;
     sum += 5;
     printf("%d", sum);
     return 0;
}

有时输出为 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);
}

在我的系统上;最近的 Ubuntu,最近的 GCC 在每次运行时都会产生不正确的结果,而你原来的例子总是产生 5。但我不能对你的系统做出任何保证。

关于在 c 中的两次执行之间故意更改随机内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52828584/

相关文章:

c - 在c中增加 union 数据

c - 可变 C 函数中的空值

c++ - C语言求结构体的大小

c - 有没有办法在 c 中创建自定义类型转换?

c++ - 有没有办法获取堆上可用的内存地址范围?

c++ - 我可以更改 CPU 模式以读取内存吗?

c++ - 使用新标准

heroku 上的 node.js Web 服务器 - 不断增长的内存

c++ - OS API 在结构中分配成员。先释放结构还是先释放每个成员?

java - Java 堆分析工具的推荐?