2013-06-27 83 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()都是错误的,导致未定义的行为。永远不要这样做。 –