为什么gcc(openSUSE 11.3上的默认版本)在语句int * p = malloc(sizeof(int))上给出错误;?

时间:2014-03-10 06:46:41

标签: gcc casting malloc

malloc返回一个void指针。如果没有对返回值进行类型转换,为什么它对我不起作用? 错误很清楚地说gcc不允许从void *转换为int *。

2 个答案:

答案 0 :(得分:2)

在C中,你不需要施放。事实上,施放那里是一个坏主意,因为它可能会导致某些微妙的错误。

但是,在C ++中需要 ,所以这是我的第一个猜测,你以某种方式调用C ++编译器。也许您的源文件是*.cpp*.C,这两个文件都可以自动地被视为C ++而不是C。

有关详细信息,请参阅here

  

C ++源文件通常使用后缀“.C”,“。cc”,“。cpp”,“。CPP”,“。c ++”,“。cc”或“.cxx”之一; C ++头文件通常使用'.hh','。hpp','。H'或(对于共享模板代码)'。tcc';和预处理的C ++文件使用后缀'.ii'。 GCC识别具有这些名称的文件并将它们编译为C ++程序,即使您以与编译C程序相同的方式调用编译器(通常使用名称gcc)。

知道您尝试将void*转换为int*的事实意味着您拥有有效的malloc原型,因此我可以'看到它不是强加C ++规则。

答案 1 :(得分:0)

没有代码我无法帮助你,但你可以试试这个:

p = (int*)malloc(sizeof(int));

提供有关您想要做什么以及分配什么的更多信息。