gpt4 book ai didi

c++ - 使用动态分配将 char* 复制到另一个 char**

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:07 28 4
gpt4 key购买 nike

我在这个主题上还是个新手,但有人能解释一下如何将一个 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
}

和一个 Actor :

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

主要.cpp

Hardware hard("CPU", 250)

我应该在哪里释放它而不会出现内存泄漏并获得正确的输出?

最佳答案

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

如果您不想公开 name_变量,你可以free它在 Hardware 的析构函数中类。

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

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

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

关于c++ - 使用动态分配将 char* 复制到另一个 char**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52739242/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com