我正在使用 Visual C++ 构建一个包含一些开源项目的 dll,但是当我遇到错误时,它显示为:
“f:\dd\vctools\crt_bld\self_x86\crt\src\vsprintf.c”是怎么出来的?我什至没有“f”盘。我搜索了我的源代码,没有这样的字符串。
对此有任何想法吗?
我正在使用 Visual C++ 构建一个包含一些开源项目的 dll,但是当我遇到错误时,它显示为:
“f:\dd\vctools\crt_bld\self_x86\crt\src\vsprintf.c”是怎么出来的?我什至没有“f”盘。我搜索了我的源代码,没有这样的字符串。
对此有任何想法吗?
@Dcoder 所说的文件路径不是来自您的磁盘。
此消息来自您与程序链接的 CRT(C 运行时库)。MSVCRT.DLL(或它的一个版本)
当微软编写他们的源代码来创建这个库时,他们在其中构建了称为Assertions的特殊代码。此代码(当您链接到库的调试版本时)检查您发送到库中函数的参数,并将有用的消息传递给您。
在这种情况下,您调用了类似printf
orsprintf
等函数,并且最终进入了一个 Microsoft 函数,该函数位于一个名为vsprintf.c
.
当库在 Microsoft 内部编译时,此文件是在 F: 驱动器 INSIDE Microsoft 上完成的。它不在您的磁盘上。
编辑:如果您将代码添加到您的问题中,我们可以帮助您找到发生这种情况的位置。
正如其他人在评论中指出的那样,断言对话框中描述的路径是引发断言的源文件的路径。在这种情况下,CRTsprintf
函数抛出了一个断言。
'f:...' 路径不是指您自己机器上的路径:它是指向将文件编译成 CRT DLL 的机器上的源文件的路径。
这是调试断言失败 - 您显然将 -value 传递NULL
给了sprintf
-family 的函数。
您应该检查您的源代码中是否存在NULL
您传递给此类函数的任何值。
它是安装通用运行时 (CRT) 框架的地方。vsprintf.c 是 CRT 的一部分,该 DLL 中的某些内容调用了具有空格式字符串的 sprintf() 函数之一。