#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, но уже примерно догадалась, какие последствия это имеет ^^ Ну и попробовала запустить музыку - память не кушается, остановить - память начинает кушаться ^^

А нефиг без музыки сидеть ^_^