#post-id: 3585-15-34
#original-date: 20.05.2010 Thu
#original-time: 3:34 PM
#original-day: 3585
#original-host: WinXP Prof SP3 (Build 2600)
К посту про утечку памяти. Всё оказалось проще, чем я думала. Вот код:
Суть этих функций в том, что они позволяют передавать в оба парметра одну и туже BSTR. Например, когда нам нужно её урезать. При использовании стандартной функции оная сначала освобождает BSTR, а потом только оттуда начинает что-то копировать - могут возникнуть ошибки (память портится) и даже исключения. Поэтому я написала свою заглушку чтобы не жонглировать постоянно временными буферами. Написать-то написала, а про освобождение строки забыла. Вот оно и вылезло...
Вот код, который показывает как течёт память (смотреть в диспетчере задач):
#upd: Чёрт, в Debug сборке работает нормально, а в Release всё равно память жрёт! OO
#upd: А, поняла ^^ У меня там при отладочной сборке не проверялось, стоит ли WinAMP на паузе или нет. Поэтому строка всегда возвращалась. А в релизе если плеер стоял на паузе, возвращался NULL, а уже полученная строка даже не освобождалась.
Исправила так:
Хотела сначала проверять, стоит ли WinAMP на паузе или нет, но в таком случае будет не ясно, стоит он на паузе или вообще его окно не найдено. Поэтому решила просто освобождать строку.
А вообще весело было ^^ Сначала начала искать, чем отличается отладочная сборка, нашла эту функцию:
Подумала, что возможно дело в возвращаемом значении - так и оказалось ^^ Я попробовала закомантировать #if, но уже примерно догадалась, какие последствия это имеет ^^ Ну и попробовала запустить музыку - память не кушается, остановить - память начинает кушаться ^^
А нефиг без музыки сидеть ^_^