使用dmalloc和最近的g ++

时间:2012-11-12 16:28:20

标签: c++ gcc dmalloc

我正在尝试将dmalloc与g ++ 4.7一起使用。

我得到的错误信息是:

/usr/include/dmalloc.h:457:32: error: declaration of 'char* strdup(const char*)' has a different exception specifier
/usr/include/string.h:130:14: error: from previous declaration 'char* strdup(const char*) throw ()'
  1. 为什么C函数会抛出异常?
  2. 我可以告诉编译器在编译时忽略throw()说明符吗?
  3. ...或者我必须以某种方式修补dmalloc?

2 个答案:

答案 0 :(得分:1)

C函数不会抛出异常,但异常可以在C函数帧中传播。 throw()规范告诉编译器,该函数不会产生任何异常,无论是由函数生成还是由链中的其他函数生成。

在这种情况下,您正在编译C ++源代码,它恰好包含具有C链接的函数的外部声明。如果仅仅这一点不允许编译器得出关于包含函数的库或用于实现该函数的语言的结论,因此编译器不能假设有关异常的任何内容并且必须保守地编译代码,抛出( )spec没有放在那里。

您必须更新和/或修补dmalloc。

答案 1 :(得分:0)

strdup删除dmalloc.h的声明。它似乎与不再有效的C库有关。