我用C语言编写了一个包含以下功能的程序:
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"中编译得很好。那是为什么?

发布于 2016-02-23 22:43:07
您可以使宏更容易使用:
#define e_new(type) ((type*)malloc(sizeof(type)))
#define e_new_array(type, count) ((type*)malloc((count)*sizeof(type)))示例用法:
graph_t *g = e_new(graph_t);
graph_t *ten_gs = e_new_array(graph_t, 10);请注意,这并不是特定于您的e_malloc - malloc本身在C++中也有同样的问题。
发布于 2016-02-23 22:29:51
正如编译器错误明确指出的那样,错误在调用代码中,而不是在e_malloc中。
你可能有这样的东西:
graph_t *g;
g = e_malloc(sizeof(graph_t));错误是e_malloc返回的e_malloc与预期的graph_t*之间的类型转换。常规malloc显示相同的行为。您需要显式地进行类型转换:
g = (graph_t*)e_malloc(sizeof(graph_t));发布于 2016-02-23 22:32:56
您不应该在C++中使用此构造。在C++中,您需要使用new而不是malloc -而new已经抛出一个异常(默认情况下)。问题解决了。
https://stackoverflow.com/questions/35589457
复制相似问题