查询内存免费

时间:2014-11-07 06:56:18

标签: c++ compiler-errors cstring

我在下面的代码中遇到编译错误。我正在编写一个用C ++释放内存的函数

template<class T> inline void kill(T& v)
{
   free(v);
   v=0;
}

我正在调用此函数来释放Class对象,有时会释放一个字符串并低于错误。

错误1'void free(void *)':无法将参数1从'const char *'转换为'void *'

错误2'void free(void *)':无法将参数1从'Cstring'转换为'void *'

如果我更改下面的代码,则没有错误。

template<class T> inline void kill(T& v)
{
   free((void*)v);
   v=0;
}

还有其他更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

如果您提到了正在使用的编译器,那就太好了。

在Visual Studio 2008中,我尝试编译你的代码(第一个例子),它正在运行。

答案是,如果编译器不允许,你可以做什么。

您必须仅使用第二个示例代码。

但通常编译器应该允许这样做。

答案 1 :(得分:0)

free应该在你从malloc获得的指针上使用 T&是参考。除非那是对指针的引用,否则你的代码没有任何意义。对指针的引用很少见,但C对malloc返回的指针的C ++引用甚至更少。您的代码非常可疑并且非常容易出错。