crtisvalidheappointer



Автор Ника Рика задал вопрос в разделе Другие языки и технологии

C++ Как правильно в данном случае освободить память? и получил лучший ответ

Ответ от
Смотрите, что вы делаете:
CString * message = new CString(""); // выделили память, создали объект (а почему указатель, кстати?)
message = (CString*) lParam; // и тут же его потеряли.. ппц.
и далее:
delete [] message; // а откуда мы знаем, что вызывающая сторона конструирует содержимое lParam именно так? и разве это вектор?
То есть у вас в message уже давно не ваша строка, а то, что передала вызывающая сторона, и в идеале - вы не имеете права трогать это (да и не знаете, можно ли, и как именно освобождать эту память - она не ваша).
Kikimora Boloto
Мастер
(1056)
Так, как вы и конвертите, просто не нужно new и delete
CString * message = (CString*) lParam;
вот и всё

Ответ от Зло[гуру]
в любом случае, строку ты создаешь через new - значит, удалять надо с помощью delete, а никак не delete [].
НО!
1) по адресу А1 выделена память: CString * message = new CString("");
2) присваивание - теперь в message адрес А2: message = (CString*) lParam;
3) delete [] message; - пытаемся удалить память по адресу А2, а не А1 - АЙ-ЯЙ-ЯЙ!

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: C++ Как правильно в данном случае освободить память?
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*