首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Malloc C和C++代码兼容性

Malloc C和C++代码兼容性
EN

Stack Overflow用户
提问于 2016-02-23 22:23:44
回答 3查看 338关注 0票数 0

我用C语言编写了一个包含以下功能的程序:

代码语言:javascript
运行
复制
void *e_malloc(size_t size)
{
    void *m = malloc(size);

    if (!m)
    {
        printf("Out of memory, fatal error.");
        abort();
    }

    return m;
}

当内存不足时,我使用它作为退出程序的error free malloc。问题是,当我用g++在linux中编译代码时,我会得到一个错误,因为它说它需要被抛出,正如您所看到的,我总是返回一个空指针,因为这就是malloc返回的(当然,gcc编译得很好)。有什么方法可以修改这个函数使它在两个编译器上工作吗?我每次都要投吗?还有其他选择来做我想做的事吗?

此外,当我使用Cmake (通过Clion )时,代码在"-std=C++11"中编译得很好。那是为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-23 22:43:07

您可以使宏更容易使用:

代码语言:javascript
运行
复制
#define e_new(type) ((type*)malloc(sizeof(type)))
#define e_new_array(type, count) ((type*)malloc((count)*sizeof(type)))

示例用法:

代码语言:javascript
运行
复制
graph_t *g = e_new(graph_t);
graph_t *ten_gs = e_new_array(graph_t, 10);

请注意,这并不是特定于您的e_malloc - malloc本身在C++中也有同样的问题。

票数 3
EN

Stack Overflow用户

发布于 2016-02-23 22:29:51

正如编译器错误明确指出的那样,错误在调用代码中,而不是在e_malloc中。

你可能有这样的东西:

代码语言:javascript
运行
复制
graph_t *g;
g = e_malloc(sizeof(graph_t));

错误是e_malloc返回的e_malloc与预期的graph_t*之间的类型转换。常规malloc显示相同的行为。您需要显式地进行类型转换:

代码语言:javascript
运行
复制
g = (graph_t*)e_malloc(sizeof(graph_t));
票数 2
EN

Stack Overflow用户

发布于 2016-02-23 22:32:56

您不应该在C++中使用此构造。在C++中,您需要使用new而不是malloc -而new已经抛出一个异常(默认情况下)。问题解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35589457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档