malloc返回一个void指针。如果没有对返回值进行类型转换,为什么它对我不起作用? 错误很清楚地说gcc不允许从void *转换为int *。
答案 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));
提供有关您想要做什么以及分配什么的更多信息。