1

我已经在一个可视化 c++ 控制台应用程序中成功实现了 bonjour sdk。但是当我尝试在 Windows 窗体应用程序(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));

如果有人知道一些处理此类问题的资源,那将非常有帮助。

非常感谢您的帮助

4

1 回答 1

0

您没有向我们提供太多信息,但一个开始寻找的地方是这一点:

它可能是从另一个堆分配的

您是否正在释放 Bonjour 分配的对象?bonjour.dll 链接到哪个 C 运行时库?您是否在表单应用程序中使用相同的(DLL 或静态、多线程或非多线程、调试或发布)?您使用的与控制台应用程序中的相同吗?

一般来说,出于这种原因释放在其他 dll 中分配的内存是一个坏主意。没有BonjourFree可以调用的函数来释放在 Bonjour 中分配的对象吗?

或者,您可能会溢出缓冲区并在 Bonjour 上独立地覆盖调试内存分配边界。尝试查看失败的内存,看看它是否正确。

于 2010-09-27T16:55:06.197 回答