2016-11-10 160 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它。然而,我正在努力工作,因爲我希望得到你認爲是錯誤的原因 –

相關問題