【发布时间】:2015-08-24 14:55:08
【问题描述】:
int main(){
int i;
int arr[4];
for(int i=0; i<=4; i++){
arr[i] = 0;
}
return 0;
}
- 我在 youtube 上观看了 CS107(第 13 讲)的视频,其中显示了这个示例,并通过显示内存图告诉了为什么上述程序会导致无限循环。 arr[4] 越界,应该指向存储 i 的地址,并将 i 的值更改回 0,从而导致无限循环。但是当我尝试使用 gcc 编译器在我的 mac 上运行它时,for 循环执行了 5 次(通过插入 printf 检查)。即 i = 0,1,2,3,4 的值。
【问题讨论】:
-
这是未定义的行为,除其他外,取决于编译器。当您遇到无限循环时,可能是因为
i的内存位置位于数组之后,而当您在数组之外写入0时,您实际上将i修改为零。为确保您必须查看编译器生成的汇编代码。 -
是“解释我的 UB 实例”月吗?有通知吗?
标签: c infinite-loop memoryview