Нахождение нарушений памяти / утечки - PullRequest
2 голосов
/ 14 декабря 2010

У меня есть приложение, разработанное в VC 2008 (C ++), которое использует dll оси, которое использует dll openssl. И кто-то в цепочке повреждает кучу - ситуация, которая приводит к тому, что у меня в приложении возникает «нарушение доступа к памяти» в местах, где нарушение не должно / не может произойти. Итак, кто-то в цепочке axis-ssl что-то испортил, но я не могу найти, кто или что.

Я пытался использовать инструмент DevPartner для утечек памяти, но он не находит утечек - ничего.

Как мне подойти к этой проблеме? Я несколько раз просматривал документацию по оси и ssl, реализовал и проверил все возможные проблемы и исправления, связанные с управлением памятью, но безрезультатно.

Большое спасибо! Marin

Ответы [ 4 ]

3 голосов
/ 14 декабря 2010

Почему вы думаете, что утечка может быть как-то ответственна за коррупцию? Вам нужно следить за доступом за пределы допустимого уровня, доступом к мертвым указателям, незаконным приведением типов и тому подобным, а не за утечкой. Это сложно сделать. Valgrind - отличный инструмент для решения подобных проблем, но, к сожалению, он не доступен для Win32. Если ваш код переносим, ​​вы можете попробовать отладить его в Linux, в противном случае вам нужно будет либо использовать коммерческие инструменты, такие как Purify, либо сделать это по-старому, с помощью ведения журналов и утверждений, и, конечно, отладчика.

3 голосов
/ 14 декабря 2010

Попробуйте использовать MS верификатор приложения . Он интегрируется с Visual Studio, поэтому вы можете запускать «проверенный» прямо из него.

2 голосов
/ 14 декабря 2010

Если вы получаете отладочные версии библиотек, MSVC предлагает отладку malloc и бесплатную, а также отладку new и delete.Они содержат такие вещи, как обнаружение перезаписи.

http://msdn.microsoft.com/en-us/library/bebs9zyz.aspx

1 голос
/ 14 декабря 2010

Может быть, в этой статье MSDN могут быть ответы, которые вы ищете: Поиск утечки памяти

Также вы можете попробовать этот инструмент LeakDiag .Не уверен, почему нет ссылки на него в MSDN?!?!?Но есть аккуратная статья в Codeproject.com

...