2013-06-27 114 views
-5

爲什麼下面的代碼塊不起作用?以下代碼塊有什麼問題?

int *p1 = malloc(128); 

int main(void) { 
char *p2 = malloc(128); 
} 
+4

你是什麼意思「不工作「?你能粘貼錯誤信息嗎? –

+0

(1):錯誤:初始化程序必須是常量。 – 2013-06-27 01:24:02

+1

定義「不起作用」:你會得到什麼錯誤,你期望發生什麼以及發生了什麼。 –

回答

1

你不能使用malloc像的一個代碼塊之外初始化P1,只是做這裏面主要像P2

1

你不能在一個全局變量的初始化調用一個函數。這是它所抱怨的行:

int *p1 = malloc(128); 

將其更改爲NULL,然後在main中初始化它。

2

全局變量的初始化必須是常量,所以第一個malloc會導致編譯時錯誤。

-2

1,基本錯誤是你的主要方法必須返回一些int值

int main(void) { 
char *p2 = malloc(128); 
return 0; 
} 

,或者嘗試

void main(){ 
char *p2 = malloc(128); 
} 

2,您可能要指定您的指針是什麼樣的緩衝,否則它將是一個(void *)類型的指針,所以我建議你可以嘗試:

int *p1 = (int*)malloc(128); 
char *p2 = (char*)malloc(128); 
+1

-1'void main()'確實不正確。也不需要鑄造malloc。空指針被自動轉換爲任何指針,你不必指定任何東西。 – 2013-06-27 01:35:41

+0

我會比這更加強烈:在任何託管實現上,void main()都是錯誤的,導致未定義的行爲。永遠不要這樣做。 –