这是删除析构函数中的数组的正确方法吗?

Is this the right way to delete an array in a destructor?

本文关键字:方法 数组 删除 析构函数      更新时间:2023-10-16

我希望你们都度过美好的一天!所以我想创建一个将单词(字符串(保存为字符数组的类。我在默认构造函数中为 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 ,这将为你负责内存管理。