【发布时间】:2016-01-08 21:21:09
【问题描述】:
在我的一个 c++ 函数中,我调用了 ab demangle。我想在将结果更改为字符串后释放结果。这是代码:
const char * realName;
string name;
const std::type_info &ti = typeid(*this);
realName = abi::__cxa_demangle(ti.name(), 0, 0, &status);
name= realName;
int index =name.find_last_of(':');
name = name.substr(index+1, name.length()-index-1);
free((void *) realName);
代码运行没有问题,但 eclipse 编译器不满意并显示使用 free 的错误:“函数'free' 无法解析”。
我尝试使用删除而不是免费。
delete realName;
代码运行没有问题,Eclipse 编译器很满意,但是当我使用 valgrind 分析代码时,我收到了一个分析错误: 不匹配的free()/delete/delete[]
所以我的问题是: 1-我应该在 C++ 中使用 free 还是应该只使用 delete、delete [] 2-如果我不应该使用 free 为什么 valgrind 给我一个错误 3-如果我应该免费使用,为什么 eclipse cdt 编译器会给我一个编译错误,但是当我运行代码时一切正常。 4-我的代码是否具有基于 c++11 的正确样式?还是c和老c++的结合?
【问题讨论】:
标签: c++ pointers memory-leaks valgrind eclipse-cdt