2011-03-29 82 views
0

我有wchar_t的向量*这样的:解除分配的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; 
} 

它编译,一切工作正常,但是当它的时间来释放我有一个rountime错误记忆:

error http://k.min.us/iklWGE.png

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

+2

你应该使用'std :: wstring'来避免遇到这样的问题。 – 2011-03-29 13:28:35

回答

3

有了这个myfunction(L"this is my string");你不会创建一个新的字符串。这是一个常量字符串,存储在您的exe文件中。而且由于您没有明确指出new,所以您也不需要delete它。
只能成对使用new and deletenew[] and delete[]

1

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

0

你还没有自己分配任何记忆。如果你的代码中没有任何新的[],你也不需要任何删除[]。