_CrtSetBreakAlloc для отслеживания утечки памяти в COM-объекте - PullRequest
1 голос
/ 28 января 2011

Когда мое приложение заканчивается, отладочная сборка в visual studio выводит на печать все нераспределенные объекты и порядковый номер выделения, который не был освобожден. Тогда обычно я просто вызываю _CrtSetBreakAlloc (x), где 'x' - это номер alloc seq, и получаю удобный ASSERT в момент выделения. Однако это не работает, когда утечка происходит в COM-объекте, по-видимому. Есть ли простой способ использовать порядковый номер выделения, чтобы остановить выполнение? Я попытался установить условную точку останова в dbgheap.c, и она тоже не сработала, чего я не понимаю - COM-объект собран как отладочный.

1 Ответ

2 голосов
/ 29 января 2011

Функция _CrtSetBreakAlloc будет работать только с библиотекой времени выполнения C, с которой связан ваш модуль.В этом случае он будет работать с библиотекой времени выполнения C, связанной с вашим приложением.Я предполагаю, что ваш COM-объект живет в другом модуле (предположительно, в DLL).Если COM-объект статически связан с библиотекой времени выполнения C, то вызовы _CrtSetBreakAlloc не окажут влияния на границы модуля, поскольку ваше приложение и модуль COM не совместно используют одну среду выполнения и кучу.

МожетВы изменяете исходный код / ​​сборку COM-модуля?

...