聲明簡單的結構:困惑與訪問內存的malloc(未初始化)
struct s {
char* addr;
};
s *ips;
現在在分配這些結構陣列存儲
num = 5
ips = (r *) malloc(num * sizeof(r));
我知道剛纔的malloc分配內存,並沒有初始化,有可能是垃圾值。
現在我想知道如果我不初始化一個,並嘗試訪問會發生什麼?
//Init for 4 of them
for(int i = 0; i < num-1; i++)
ips[i].addr = strdup("123");
//Accessing un-initialize one:
if(ips[4].addr) {
printf("Accessing uninitialize one and lets say freeing!!!");
free(ips[4].addr);
}
理想不應該進入這個循環。但是,我認爲,因爲它可能是垃圾值。我不確定!
恭喜!你問了第1,000,000個「當我調用未定義的行爲時會發生什麼?」題!您的免費C標準副本在郵件中。 –
[未定義,未指定和實現定義的行爲]的可能的重複(http://stackoverflow.com/questions/2397984/undefined-unspecified-and-implementation-defined-behavior) –
只要你編寫不編譯的代碼你應該安全。 –