在 C++ 11 中使用 free(const char *)
using free(const char *) in c++ 11
在我的一个 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 的错误:"Function 'free' could not be resolved".
我尝试使用 delete 而不是 free。
delete realName;
代码 运行 没有问题,eclipse 编译器很满意,但是当我使用 valgrind 分析代码时,出现分析错误:
不匹配的 free() / delete / delete []
所以我的问题是:
1- 我应该在 C++ 中使用 free 还是只使用 delete, delete []
2- 如果我不应该使用 free 为什么 valgrind 给我一个错误
3- 如果我应该免费使用,为什么 eclipse cdt comipler 会给我一个编译错误,但是当我 运行 编码时一切正常。
4- 我的代码是否具有基于 C++11 的正确样式?或者它是 c 和旧 c++ 的组合?
您必须使用 free
,因为文档中说使用 free
。
也许您需要包含正确的头文件和库。
#include <stdlib.h>
也许 -lC
Should I use free
in C++ or shall I use just delete
, delete[]
?
您应该使用与分配匹配的函数或运算符。分配内存供自己使用时,应使用new
/new[]
进行分配,使用delete
/delete[]
进行释放。
当要释放的内存来自其他来源时,例如__cxa_demangle
,您应该阅读文档以了解在释放时需要使用哪些功能。您的函数的 documentation 指出
the demangled name is placed in a region of memory allocated with malloc
.
因此,您必须使用 free
来释放它。
If I should use free
why Eclipse cdt compiler is giving me a compile error but when I am running code everything is OK.
函数 free
在 <cstdlib>
header 中定义。您需要将此 header 添加到您的 cpp 文件中,以确保您的代码可以正常编译。
在我的一个 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 的错误:"Function 'free' could not be resolved".
我尝试使用 delete 而不是 free。
delete realName;
代码 运行 没有问题,eclipse 编译器很满意,但是当我使用 valgrind 分析代码时,出现分析错误: 不匹配的 free() / delete / delete []
所以我的问题是: 1- 我应该在 C++ 中使用 free 还是只使用 delete, delete [] 2- 如果我不应该使用 free 为什么 valgrind 给我一个错误 3- 如果我应该免费使用,为什么 eclipse cdt comipler 会给我一个编译错误,但是当我 运行 编码时一切正常。 4- 我的代码是否具有基于 C++11 的正确样式?或者它是 c 和旧 c++ 的组合?
您必须使用 free
,因为文档中说使用 free
。
也许您需要包含正确的头文件和库。
#include <stdlib.h>
也许 -lC
Should I use
free
in C++ or shall I use justdelete
,delete[]
?
您应该使用与分配匹配的函数或运算符。分配内存供自己使用时,应使用new
/new[]
进行分配,使用delete
/delete[]
进行释放。
当要释放的内存来自其他来源时,例如__cxa_demangle
,您应该阅读文档以了解在释放时需要使用哪些功能。您的函数的 documentation 指出
the demangled name is placed in a region of memory allocated with
malloc
.
因此,您必须使用 free
来释放它。
If I should use
free
why Eclipse cdt compiler is giving me a compile error but when I am running code everything is OK.
函数 free
在 <cstdlib>
header 中定义。您需要将此 header 添加到您的 cpp 文件中,以确保您的代码可以正常编译。