Вы не предоставили нам очень много информации, но один из мест, где можно начать поиск, это бит:
возможно, оно выделено из другой кучи
Вы освобождаете объекты, выделенные Bonjour? С какой библиотекой времени выполнения C связана bonjour.dll? Используете ли вы один и тот же (DLL или статический, многопоточный или нет, отладка или выпуск) в приложении форм? Используете ли вы тот же, что и в консольном приложении?
В общем, по такой причине плохая идея освобождать память, выделенную в других библиотеках. Разве нет функции BonjourFree
, которую можно вызвать для освобождения объектов, выделенных в Bonjour?
В качестве альтернативы вы можете переполнять буфер и перезаписывать границы распределения отладочной памяти самостоятельно в Bonjour. Попробуйте взглянуть на память с ошибкой и посмотрите, правильно ли она выглядит.