1

char*をプライベート メンバーとして保持する myString という単純なクラスがあります。どうやっても消せないようです。

class myString
{
public:
  myString():letters( "This is a string" ){}
  ~myString()
  {
    delete []letters;
  }
private:
  char* letters;
}

delete letters、などを試しdelete[] lettersましたが、常にエラーが発生します。私はデバッガーを使用していましたが、文字は常に文字列/文字列を指すように初期化され、デバッガーは常に削除行でクラッシュします。

4

4 に答える 4

3

letters文字列リテラルを指します。つまり、 のすべてのインスタンスはmyString、ロードされたプログラム実行可能ファイル内の同じデータを指します。

文字列リテラルは削除できませんし、削除する必要もありません。

于 2013-09-26T17:46:25.587 に答える
3

注意してください:

  • ポインターが自動的に割り当てられることはありません。
  • 「Hello Word」の型は const char[11] です (変換は char* ではなく const char* です)
  • const char* を char* に割り当てるのは良くありません。
  • ポインターが以前に new/new[] から値を取得した場合にのみ、ポインターを削除/delete[] できます。
于 2013-09-26T17:51:59.403 に答える
2

最初に割り当てられたメモリを削除しようとすると、文字列リテラルを削除しようとしています。

class myString
{
public:
  myString() {letters= new char [25]; /* Copying code */}
  ~myString()
  {
    delete []letters;
  }
private:
  char* letters;
}
于 2013-09-26T17:47:26.077 に答える