2013-09-23 125 views
-2
#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int *arr = NULL; 
    arr = (int *) malloc(1*sizeof(int)); 
    arr[0] = 4; 
    arr[1] = 2; 
    printf("%d%d\n", arr[0], arr[1]); 
    system("PAUSE"); 
    return 0; 
} 

爲什麼它返回42?是不是malloc大小隻有一個整數可用於
存儲? (當我嘗試arr中[1]是不是應該拋出一個錯誤?)C - 'malloc'似乎無法正常工作

我使用Win7的32位

+0

這是未定義的。您只是訪問一些隨機存儲器空間並將其讀取爲整數。它不一定會拋出一個錯誤,但通常會給你一些奇怪的結果。 – texasbruce

回答

0

你的程序導致未定義行爲,所以什麼可能發生,包括正確行爲的出現。你只是覆蓋你請求的內存的末尾。之後,所有投注都關閉。您可能不會覆蓋任何內容,也可能是一些記賬數據,或者誰知道什麼。只是不要那樣做。

+0

我試着去了解malloc函數,而不是將它用於'真實'。 – funerr

+0

不幸的是,你試過的代碼不會教你任何有用的東西。未定義的行爲是一個危險的地方。 –

2

當我嘗試arr中[1],以通過錯誤

它不必須是不是應該,但它可能。這就是C中未定義行爲的美妙之處,但沒有說明會發生什麼。

相關問題