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

时间:2017-03-19 18:09:45

标签: c++

我希望你们都过得愉快! 所以我想创建一个将单词(字符串)保存为字符数组的类。 我在默认构造函数中将内存分配给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的内存,对吧?有什么帮助吗?

提前致谢:)

1 个答案:

答案 0 :(得分:3)

    str=new char[10];
    str="Hello";

第一行分配一个新的char数组,该数组可以容纳10个字符(或9个字符和一个空字节)。但是,第二行将指针str设置为字符串文字"Hello"的地址。因此,当您调用delete []时,您试图释放指向字符串文字的指针,而不是指向某些动态分配的内存的指针。如果您希望动态分配字符串,则应复制字符串(最好使用strcpy),或者只使用std::string,这将为您处理内存管理。