在类中复制和存储LPTSTR会导致崩溃

时间:2012-06-11 10:04:45

标签: c++ winapi

我正在尝试复制LPTSTR并将该字符串存储为对象中的成员变量。但是我复制LPTSTR的尝试似乎失败了,当我去访问/打印复制的LPTSTR的值时,我的程序崩溃了。

是否可以复制LPTSTR并将其存储在我的班级中,或者更好地使用TCHAR *?

class Checkbox
{
   private:
      LPTSTR text;
      HWND hwnd;

   public:
      Checkbox(HWND nHwnd, LPTSTR nText)
      {
        lstrcpy(checkText, text); 
      }

      void print()
      {
        // Causes a crash
        MessageBox(hwnd, text, text, MB_OK);
      }
};

3 个答案:

答案 0 :(得分:1)

LPTSTR只是一个指针。因此,在使用之前需要注意分配内存。 TCHAR *也是如此。或者你可以使用wstring,如果你不得不担心unicode字符串。

答案 1 :(得分:0)

您复制到未初始化的指针,该指针将覆盖内存中的某些随机区域。您需要先为指针分配内存,并且还要记得在不再需要它时释放内存。

答案 2 :(得分:0)

与其他答案一样,您需要先将内存分配给“LPTSTR text”才能使用它。

获取要复制的字符串长度(strlen应该这样做),然后像这样分配内存:

text = TCHAR[length];

您可以为类声明一个解构函数,以便在程序结束或程序离开类实例的范围时删除已分配的内存。

~CheckBox()
{
if (text)
delete[] text;
}

您还应该创建另一个没有参数的构造函数,将文本设置为NULL;