【发布时间】:2018-10-10 11:30:01
【问题描述】:
我还是这个主题的新手,但谁能解释我如何将一个 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;
}
main.cpp
Hardware hard("CPU", 250)
我应该在哪里释放它而不发生内存泄漏并获得正确的输出?
【问题讨论】:
-
“我应该在哪里释放它而不发生内存泄漏并获得正确的输出?”不。使用
std::string。 -
您的代码有很多问题。为什么不用
std::string? -
问题是,我不允许更改为什么我必须使用它的参数数据类型
-
你真的需要复制任何东西吗?在您展示的示例中,没有必要这样做;只需在内部存储一个指向文字的指针。不要复制它,不要分配任何内存,不要释放它。
-
由于这似乎是对课堂动态记忆的练习,请务必检查三/五/零规则(en.cppreference.com/w/cpp/language/rule_of_three)。
标签: c++ memory-management memory-leaks