реализовать Bonjour SDK в приложении Visual C ++ Windows Forms - PullRequest
1 голос
/ 27 сентября 2010

Я успешно реализовал Bonjour SDK в консольном приложении Visual C ++. но когда я пытаюсь реализовать тот же код в приложении Windows Forms (Visual C ++), я получаю странные ошибки, вероятно, связанные с проблемой локальной кучи с Bonjour DLL.

Сбой следующего утверждения в файле dbgheap.c:

/*
* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
_ASSERTE(_CrtIsValidHeapPointer(pUserData));

Было бы очень полезно, если бы кто-то знал о ресурсах, касающихся этой проблемы.

Большое спасибо за любую помощь

1 Ответ

0 голосов
/ 27 сентября 2010

Вы не предоставили нам очень много информации, но один из мест, где можно начать поиск, это бит:

возможно, оно выделено из другой кучи

Вы освобождаете объекты, выделенные Bonjour? С какой библиотекой времени выполнения C связана bonjour.dll? Используете ли вы один и тот же (DLL или статический, многопоточный или нет, отладка или выпуск) в приложении форм? Используете ли вы тот же, что и в консольном приложении?

В общем, по такой причине плохая идея освобождать память, выделенную в других библиотеках. Разве нет функции BonjourFree, которую можно вызвать для освобождения объектов, выделенных в Bonjour?

В качестве альтернативы вы можете переполнять буфер и перезаписывать границы распределения отладочной памяти самостоятельно в Bonjour. Попробуйте взглянуть на память с ошибкой и посмотрите, правильно ли она выглядит.

...