这是删除析构函数中的数组的正确方法吗?
Is this the right way to delete an array in a destructor?
我希望你们都度过美好的一天!所以我想创建一个将单词(字符串(保存为字符数组的类。我在默认构造函数中为 str 分配了内存,不确定它是否是这样工作的。
` #include <iostream>
using namespace std;
class String{
private:
char *str;
public:
String(){
str=new char[10];
str="Hello";
}
void getstr(){
for (int i=0;i<5;i++){
cout<<str[i];
}
}
~String(){
delete []str;
}
};
int main(){
String s1;
s1.getstr();
return 0;
}
当我运行这个程序时,它确实打印"Hello",但这是确切的输出:
*** Error in `./main': free(): invalid pointer: 0x0000000000400ab5 ***
Hello
当我删除析构函数部分时,它工作正常,但我需要释放分配给str的内存,对吧?有什么帮助吗?
提前致谢:)
str=new char[10];
str="Hello";
第一行分配一个新的 char
数组,该数组可以容纳 10 个字符(或 9 个字符和一个空字节(。但是,第二行将指针str
设置为字符串文本"Hello"
的地址。因此,当您调用 delete []
时,您正在尝试释放指向字符串文字的指针,而不是指向某个动态分配的内存的指针。如果你想让你的字符串被动态分配,你应该复制你的字符串(最好使用 strcpy(,或者只使用 std::string
,这将为你负责内存管理。
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 复制几乎为空的数组的最快方法
- 通过JNI传递数据数组的最快方法是什么
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 数组元素打印的递归方法
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++数组队列实现方法错误
- 寻找一种更好的方法来表示无符号字符数组
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 创建异构顶点数据数组的可移植方法
- 打印字符数组地址的正确方法
- 还有其他方法可以在数组中写入多维数组吗?
- 从数组中删除非唯一值、保持顺序和不使用向量的最佳方法?
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 从非类型模板参数声明 constexpr 数组的可移植方法
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案