释放向量的 wchar_t*

发布于 2024-10-27 14:24:49 字数 629 浏览 2 评论 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

为什么?我该如何解决这个问题?

I have a vector of wchar_t* like this:

std::vector<wchar_t*> myvector;

and a function that take a string and insert it into the vector

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

myfunction(L"this is my string");

when I close the program I need to delete the allocated memory of the vector so that I don't have a memory leak, to do this I'm trying to do this:

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

it compiles, all works fine but when it's time to deallocated the memory I have a rountime error:

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

why? how can I fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

温折酒 2024-11-03 14:24:49

使用此 myfunction(L"this is my string"); 您不会创建新字符串。它是一个常量字符串,存储在您的 exe 中的某个位置。由于您没有显式新建它,因此您也不需要删除它。
只能成对使用new 和delete 以及new[] 和delete[]

With this myfunction(L"this is my string"); you don't create a new string. It's a constant string that's stored somewhere in your exe. And since you don't explicitly new it, you don't need to delete it either.
Only use new and delete and new[] and delete[] in pairs!

人心善变 2024-11-03 14:24:49

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

Only delete what you new. You are not using new anywhere, neither directly nor indirectly so there’s nothing to delete. As Xeo said, a better solution is to use std::wstring.

江心雾 2024-11-03 14:24:49

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

You haven't allocated any memory yourself. If you haven't got any new[]'s in your code you don't need any delete[]'s either.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文