【发布时间】:2012-10-30 15:45:02
【问题描述】:
我有这个运算符重载器。
我的程序在创建新的wchar_t 数组时崩溃。
myObject &operator += (const myObject &s) {
wchar_t *cat = wcscat(data, s.data);
int len = wcslen(cat);
wchar_t *test = new wchar_t[len + 1]; //this is killing!
wcscpy(test, cat);
delete data;
data = test;
return *this;
}
有人知道发生了什么吗?
编辑完整的类定义
class myObject
{
private:
wchar_t *data;
public:
myObject() { data = 0; }
~myObject() { delete data; }
myObject &operator += (const myObject &s) {
wchar_t *cat = wcscat(data, s.data);
int len = wcslen(cat);
wchar_t *test = new wchar_t[len + 1];
wcscpy(test, cat);
delete data;
data = test;
return *this;
}
};
【问题讨论】:
-
“这是杀戮”是什么意思?
-
让班级持有
std::wstring,难道不能省去很多麻烦吗? -
data是否大到足以容纳最后的s.data?您还使用错误的delete调用了UB。 -
该行导致程序崩溃。
-
@chris 我的程序无法通过创建新数组。所以它与对象没有任何关系吧?
标签: c++ new-operator operator-keyword wchar-t