x = malloc(n * sizeof(int));无法将void转换为int

时间:2017-04-11 05:55:14

标签: c++ algorithm sorting

我找到了一个计算合并排序执行时间的代码。我收到的错误是"无法将void转换为int" 。我从这段代码x = malloc(n * sizeof (int));

中得到了错误
    x = malloc(n * sizeof (int));

3 个答案:

答案 0 :(得分:2)

由于这个问题用C ++标记,我推荐一个完全不同的解决方案:拥抱C ++的强大功能并使用std::vector

std::vector<int> descriptiveNameHere(n);

此方法使您无需手动管理内存分配。当vector被允许超出范围时,存储将自动被释放。

Documentation on std::vector

答案 1 :(得分:1)

C ++编译器比C编译器更严格。因此,并非所有C代码都将使用C ++编译器进行编译,因此如果您不使用任何C ++函数,则不应使用C ++编译器。

malloc返回void *,因此您必须将其强制转换为相应的类型,前提是您使用的是C编译器:

Type * x = (Type *) malloc (sizeof(Type));

但是如果你必须使用C ++和malloc,那么就像评论中提到的那样,C风格的演员应该是最后的选择,你应该使用static_cast

Type * x = static_cast<Type *>(malloc(sizeof(Type)));

答案 2 :(得分:0)

你应该像这样投射malloc。

x = (int *)malloc(sizeof(int) * n)

因为malloc只返回void指针