0

我有一个 wchar_t* 的向量,如下所示:

std::vector<wchar_t*> myvector;

和一个函数,它接受一个字符串并将其插入向量中

void myfunction(wchar_t* mystring)
{
    myvector.push_back(mystring);
}

myfunction(L"this is my string");

当我关闭程序时,我需要删除向量的分配内存,这样我就不会发生内存泄漏,为此我正在尝试这样做:

for (std::vector<wchar_t*>::iterator it = myvector.begin(); it != myvector.end(); ++it)
{
    delete [] *it;
}

它可以编译,一切正常,但是当需要释放内存时,我有一个运行时错误:

错误 http://k.min.us/iklWGE.png

为什么?我怎样才能解决这个问题?

4

4 回答 4

4

有了这个myfunction(L"this is my string");,你不会创建一个新的字符串。它是一个常量字符串,存储在您的 exe 中的某个位置。而且由于您没有明确说明new它,因此您也不需要delete它。
只能成对使用new and delete和!new[] and delete[]

于 2011-03-29T13:28:30.107 回答
1

只有deletenew。您new没有直接或间接地在任何地方使用,因此没有什么可删除的。正如 Xeo 所说,更好的解决方案是使用std::wstring.

于 2011-03-29T13:32:29.277 回答
0

您不应该删除字符串文字。

于 2011-03-29T13:29:18.453 回答
0

您自己没有分配任何内存。如果您的代码中没有任何 new[],则也不需要任何 delete[]。

于 2011-03-29T13:32:46.073 回答