Автор Ника Рика задал вопрос в разделе Другие языки и технологии
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 - АЙ-ЯЙ-ЯЙ!