我仍然是这个主题的新手,但是有人可以解释一下如何将一个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
}
和一个ctor:
Hardware::Hardware(const char* name, int cost)
{
copyString(&name_, name);
cost_ = cost;
}
main.cpp
Hardware hard("CPU", 250)
我应该在哪里释放它而不会导致内存泄漏并获得正确的输出?
答案 0 :(得分:-1)
不管实现中存在什么问题,对您问题的简单答案就是在析构函数中释放它。
如果您不想公开name_
变量,则可以在free
类的析构函数中Hardware
进行修改。
Hardware::~Hardware()
{
delete[] name_;
}
如果free
位于函数本身内部,则即使要传递不同的变量,也要删除堆分配,因为它们指向相同的内存位置。
但是,正如其他人所建议的那样,处理字符串的最佳方法是使用std::string
。