c++ - 使用动态分配将 char* 复制到另一个 char**
问题描述
我还是这个主题的新手,但有人可以解释一下我如何将一个 char* 复制到另一个 char** 作为参数而不发生内存泄漏?
void Hardware::copyString(char** dest, const char* source)
{
size_t length = strlen(source);
auto string = new char[length+1];
strncpy(string, source, length);
string[length] = '\0';
*dest = string;
//need to be freed
free(string); //if i free here the data would getting lost
}
和一个演员:
Hardware::Hardware(const char* name, int cost)
{
copyString(&name_, name);
cost_ = cost;
}
主文件
Hardware hard("CPU", 250)
我应该在哪里释放它而不会出现内存泄漏并获得正确的输出?
解决方案
无论您的实现中存在什么问题,您的问题的简单答案是在析构函数中释放它。
如果你不想暴露name_
变量,你可以free
在Hardware
类的析构函数中。
Hardware::~Hardware()
{
delete[] name_;
}
如果您free
在函数内部,即使您传递不同的变量,您也将删除堆分配,因为它们指向相同的内存位置。
但是,正如其他人所建议的那样,使用字符串的最佳方法是使用std::string
.
推荐阅读
- python - IndexError:字符串索引超出范围?百吉饼游戏
- ms-access - MS Access - 将数据库拆分为两个版本(用户和管理员)
- python - 使用 Python 将多个 excel 文件合并为一个主文件
- express - Express - JWT Cookie 未存储在浏览器中
- actions-on-google - 具有受限用户访问权限的 GAction
- android - Trip Duration Summary 作为在 Android 中的 Heremaps SDK 上启动 Route 之前的提示消息
- graph - 所有路径之间权重最低的最重边
- laravel - 使用 composer create-project 创建新的 Laravel 项目失败
- adsense - 如何让 AdSense 自动广告与 Gatsby 配合使用
- lua - NodeMCU mqtt led 亮度控制