假设我有这个数据结构
struct foo{
int a;
int b;
};
现在我想创建一个包含2个项目的数组。所以我这样做
struct foo* farry = (struct foo*) malloc(2 * sizeof(struct foo));
请纠正我,如果我错了,上面会创建2个foo结构默认初始化的插槽?那是对的吗 ?如果是,那么如果我这样做
struct foo* farry = (struct foo*) malloc(2 * sizeof(struct foo));
farry[0].a =1;
farry[1].a =2;
farry[2].a =3;
farry[3].a =4;
farry[4].a =5;
for(i=0 ; i<=4 ; i++)
{
printf("Value %d \n",farry[i].a );
}
那么为什么在farry[2].a =3
它没有告诉我发生了内存错误。相反,它只是打印1,2,3,4,5
答案 0 :(得分:0)
您只需访问堆中位于程序和用户空间中的不受控制的位置。从这个角度来看没有错,所以没有内存错误。
简单地说,你正在弄乱堆中的其他静态变量。如果你这样乱太多,你的程序就会崩溃(例如,如果由于某种原因你的乱码到达程序堆栈或者变量被搞乱将导致循环造成严重破坏)。是C
这方面很疯狂。