【问题标题】:Deallocate wchar_t* of a vector释放向量的 wchar_t*
【发布时间】:2011-03-29 13:26:26
【问题描述】:

我有一个这样的 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;
}

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

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

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

【问题讨论】:

  • 您应该使用std::wstring 以避免遇到此类问题。

标签: c++ vector wchar-t memory-management


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2020-10-14
        • 2016-02-23
        • 2021-02-26
        • 2015-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-24
        相关资源
        最近更新 更多