2016-11-10 120 views
0

假设我有这个数据结构为什么我没有得到一个内存异常这里

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

C非常宽松,阵列超出界限。访问一个未定义的数组越界会给你一个错误,虽然 –

+2

http://stackoverflow.com/documentation/c/364/undefined-behavior#t=201611100730536038753 –

+0

@PrasunJajodia好的谢谢你清理,所以我应该可靠地进行1,2是正确的,因为只有2个索引 –

回答

0

您只需访问位于程序和用户空间的堆中不受控制的位置。从这个角度来看没有错,所以没有内存错误。

只是你在乱堆堆中的其他静态变量。如果你像这样搞得太多,你的程序就会崩溃(例如,如果你因为某种原因搞乱了程序堆栈或者变量被搞乱了会导致循环肆虐)。是C是狂野的就是这方面。

+0

非常狂放的确如此与C++相比 –

+0

谢谢您投下我的答案!不知道为什么,仍然。 – Djee

+0

我没有downvote它。然而,我正在努力工作,因为我希望得到你认为是错误的原因 –

相关问题