使用动态分配将 char* 复制到另一个字符**

copy char* to another char** using dynamic allocation

本文关键字:复制 另一个 字符 char 动态分配      更新时间:2023-10-16

我在这个主题中仍然是新手,但有人可以解释我如何将一个字符*作为参数复制到另一个字符**而不会发生内存泄漏吗?

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] = '';
*dest = string;
//need to be freed
free(string); //if i free here the data would getting lost
}

和一个 ctor:

Hardware::Hardware(const char* name, int cost)
{
copyString(&name_, name);
cost_ = cost;
}

主.cpp

Hardware hard("CPU", 250)

我应该在哪里释放它而不会发生内存泄漏并拥有正确的输出?

不管你的实现中有什么问题,你的问题的简单答案是在析构函数中释放它。

如果不想公开name_变量,可以将其freeHardware类的析构函数中。

Hardware::~Hardware()
{
delete[] name_;
}

如果free位于函数本身内部,则会删除堆分配,即使您传递了不同的变量,因为它们指向相同的内存位置。

但是,正如其他人所建议的那样,使用字符串的最佳方法是使用std::string.