Освободить wchar_t * вектора - PullRequest
0 голосов
/ 29 марта 2011

У меня есть вектор 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:

ошибка http://k.min.us/iklWGE.png

почему?как я могу это исправить?

Ответы [ 4 ]

4 голосов
/ 29 марта 2011

С этим myfunction(L"this is my string"); вы не создаете новую строку. Это постоянная строка, которая хранится где-то в вашем exe. И поскольку вы явно не new это, вам не нужно delete это тоже.
Используйте new and delete и new[] and delete[] только в парах!

1 голос
/ 29 марта 2011

Только delete что вы new. Вы нигде не используете new ни прямо, ни косвенно, поэтому удалять нечего. Как сказал Xeo, лучшим решением будет использование std::wstring.

0 голосов
/ 29 марта 2011

Вы сами не распределили память. Если в вашем коде нет новых [], вам также не нужно удалять [].

0 голосов
/ 29 марта 2011
...