使用动态分配将 char* 复制到另一个字符**
copy char* to another char** using dynamic allocation
我在这个主题中仍然是新手,但有人可以解释我如何将一个字符*作为参数复制到另一个字符**而不会发生内存泄漏吗?
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_
变量,可以将其free
在Hardware
类的析构函数中。
Hardware::~Hardware()
{
delete[] name_;
}
如果free
位于函数本身内部,则会删除堆分配,即使您传递了不同的变量,因为它们指向相同的内存位置。
但是,正如其他人所建议的那样,使用字符串的最佳方法是使用std::string
.
相关文章:
- 矢量如何将数据复制到另一个矢量?
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 链表,将列表复制到另一个列表
- 将指向给定子类的指针从一个向量复制到另一个向量
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 将父类的子类的数据复制到具有相同父类的另一个类
- 使用动态分配将 char* 复制到另一个字符**
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 将字符向量复制到另一个向量
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 如何使用函数将一个对象的输入复制到另一个对象中
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 复制矩阵的一部分并粘贴到另一个矩阵C++上
- std::transform 将一个结构数组复制到另一个结构数组
- 如何避免将向量的完整值复制到另一个容器
- 如何将列表从一个类复制到另一个类
- C++将结构复制到另一个程序的资源
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- C 复制另一个文件
- 复制另一个文件时,在新文件中创建新行