我正在尝试这段代码,
#include <stdio.h>
main(){
int a[2],i;
a[5] = 12;
for(i=0;i<10;i++){
printf("%d\n", a[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它给了我输出:
1053988144
32767
0
3
0
12
-1267323827
32716
0
0
Run Code Online (Sandbox Code Playgroud)
为什么[5]可以访问?不应该通过RunTime错误吗?
C没有对数组访问进行边界检查,所以不应该这样做.语言中没有任何东西可以阻止您尝试读取您可以想象的每个(虚拟)地址,尽管操作系统和/或计算机本身通常会产生抗议,这可能会产生某种异常.请注意,仅仅因为你"可以"(它编译并运行,似乎没有任何不良影响),这并不意味着程序有效或"工作".无效内存访问的结果是未定义的行为.
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |