【发布时间】:2015-07-22 18:45:41
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *p = malloc(10);
int i;
for(i=0;i<15;i++)
{
p[i]='c';
printf("INDEX:%d %c\n",i,p[i]);
}
return 0;
}
我不知道为什么在上面的代码中,我只分配了 10 个内存,但我仍然能够访问指针的第 15 个索引。
我不知道为什么,但我认为这是因为这个指针指向一些随机的内存块,我只是覆盖了那部分内存,但我只是分配了特定数量的内存,所以我'不知道为什么它会起作用。
有人可以确认吗?
【问题讨论】:
-
当你越界时,行为是不确定的。你可能会崩溃,也可能不会。
-
C 不检查数组索引是否越界。你必须照顾它,否则它会导致 UB。