#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *arr = (int*)malloc(10);
int i;
for(i=0;i<100;i++)
{
arr[i]=i;
printf("%d", arr[i]);
}
return 0;
}
我在上面运行程序并且对 malloc 的调用将分配 10 个字节的内存,并且由于每个 int 变量占用 2 个字节,因此我可以存储 5 个 int 变量,每个变量 2 个字节,从而构成我动态分配的总共 10 个字节.
但是在调用 for-loop 时,它允许我输入值直到第 99 个索引并存储所有这些值。所以在某种程度上,如果我存储 100 个 int 值,这意味着 200 个字节的内存,而我只分配了 10 个字节。
那么这段代码的缺陷在哪里,或者 malloc 的行为如何?如果 malloc 的行为以这种方式是不确定的,那么我们如何实现正确的动态内存处理?