使用VS2013在win8.1
上构建Windows 10
项目时收到错误
'RAIG3D.Windows.exe' (Win32): Loaded 'C:\Windows\SysWOW64\mswsock.dll'. Symbols loaded.
Debug Assertion Failed!
Program: ...win8.1-universal\Debug\RAIG3D.Windows\AppX\RAIG3D.Windows.exe
File: f:\dd\vctools\crt\crtw32\misc\dbgheap.c
Line: 1424
Expression: _pFirstBlock == pHead
我在链接到项目的winsock2.h
中使用.dll
。它是一个我试图写的自定义网络库。它位于windows
分支
https://github.com/damorton/libsocket/tree/windows
这个库适用于win32调试程序,但对于win8.1,它给出了上述错误
答案 0 :(得分:2)
这不是构建错误,而是运行时错误。具体来说,一个断言已经解雇了。这就是消息告诉你的信息:
Debug Assertion失败!
刚刚执行的一段代码使用assert
宏的一些变体来捕获可能的错误。它抓住了一个。这很好。更好的是,它告诉你哪里断言宏被触发了:
程序:... win8.1-universal \ Debug \ RAIG3D.Windows \ AppX \ RAIG3D.Windows.exe
文件:f:\ dd \ vctools \ crt \ crtw32 \ misc \ dbgheap.c
行:1424
这是您的程序,但不是您的代码文件。因此,它不是您编写的断言,它是Microsoft开发人员在其C运行时库例程中添加的断言。具体来说,在dbgheap.c
文件中,这表明它与调试堆有关,调试堆用于在调试版本中分配内存。
该消息还告诉您表达式是什么意外错误,因此触发了断言:
表达式:_pFirstBlock == pHead
看起来假设相等的两个指针实际上不相等。
如果您按下了"重试"弹出的消息框上的按钮,您可以使用调试器进入代码并在上下文中查看有问题的代码行。你也可以有一个完整的调用堆栈来查看。
在调用触发此断言的库代码之前,调用堆栈有助于查看您的代码的哪一行正在执行。这个断言是CRT作者在其内存分配例程中进行的内部一致性检查。如果你触发它,你就会在你的应用程序中做一些严重的错误。
如果我冒险猜测,没有比我更多的信息可用,我猜你可能想要混合可执行文件和引用不同版本CRT的库。这不受支持,可能导致严重问题。 CRT的不同版本具有不同的对象大小,内存布局,静态变量等。这次它被一个断言捕获,你很幸运。检查项目的所有是否针对相同版本的CRT,包括生成DLL和LIB的版本。从头开始进行全面重建,以确保它们都已更新。