int main()
{
int* p = (int*)malloc(1 * 4);
p[0] = 1;
p[1] = 2;
p[2] = 3;
for (int i = 0; i < 3; i++) {
printf("%d\n", p[i]);
}
return 0;
}
上边的代码明明是申请了四个字节的内存,为什么可以存放12个字节的内容?
int main()
{
int* p = (int*)malloc(1 * 4);
p[0] = 1;
p[1] = 2;
p[2] = 3;
for (int i = 0; i < 3; i++) {
printf("%d\n", p[i]);
}
return 0;
}
上边的代码明明是申请了四个字节的内存,为什么可以存放12个字节的内容?
内存越界了。
内存访问越界是一个未定义行为。
含有未定义行为的程序什么都可能发生。
===========
你可以尝试一下在 return 之前 free(p); 。