1

我有一个名为 myString 的简单类,它将 achar*作为私有成员。无论我做什么,我似乎都无法删除它。

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

我尝试过delete letters,delete[] letters等,但我总是收到错误消息。我曾经调试器,并且字母总是初始化为一个字符串/指向一个字符串,并且调试器总是在删除行上崩溃。

4

4 回答 4

3

请注意:

  • 指针永远不会自动分配。
  • “Hello Word”的类型为 const char[11](转换是 const char* 而不是 char*)
  • 将 const char* 分配给 char* 是不好的。
  • 如果该指针之前从 new/new[] 获得了值,则只能删除/删除 [] 指针。
于 2013-09-26T17:51:59.403 回答
3

letters指向一个字符串文字,也就是说,每个实例都myString指向您加载的程序可执行文件中的相同数据。

您不能删除字符串文字,也不需要这样做。

于 2013-09-26T17:46:25.587 回答
2

首先分配内存然后尝试删除,您正在尝试删除字符串文字。

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

您似乎想要拥有该字符串的副本,以便以后可以对其进行修改。C++ 不会为你创建字符串缓冲区,你必须自己做。

myString()
{
    letters = new char[MAX_STRING_LEN];
    strcpy(letters, "This is a string");
}

自然地,使用std::string而不是动态分配的字符缓冲区会更好,但我假设你有你的理由。

于 2013-09-26T18:03:06.780 回答