1

我正在使用 Visual C++ 构建一个包含一些开源项目的 dll,但是当我遇到错误时,它显示为:

在此处输入图像描述

“f:\dd\vctools\crt_bld\self_x86\crt\src\vsprintf.c”是怎么出来的?我什至没有“f”盘。我搜索了我的源代码,没有这样的字符串。

对此有任何想法吗?

4

4 回答 4

2

@Dcoder 所说的文件路径不是来自您的磁盘。

此消息来自您与程序链接的 CRT(C 运行时库)。MSVCRT.DLL(或它的一个版本)

当微软编写他们的源代码来创建这个库时,他们在其中构建了称为Assertions的特殊代码。此代码(当您链接到库的调试版本时)检查您发送到库中函数的参数,并将有用的消息传递给您。

在这种情况下,您调用了类似printforsprintf等​​函数,并且最终进入了一个 Microsoft 函数,该函数位于一个名为vsprintf.c.

当库在 Microsoft 内部编译时,此文件是在 F: 驱动器 INSIDE Microsoft 上完成的。它不在您的磁盘上。

编辑:如果您将代码添加到您的问题中,我们可以帮助您找到发生这种情况的位置。

于 2013-04-27T07:12:24.380 回答
1

正如其他人在评论中指出的那样,断言对话框中描述的路径是引发断言的源文件的路径。在这种情况下,CRTsprintf函数抛出了一个断言。

'f:...' 路径不是指您自己机器上的路径:它是指向将文件编译成 CRT DLL 的机器上的源文件的路径。

于 2013-04-27T07:07:47.507 回答
0

这是调试断言失败 - 您显然将 -value 传递NULL给了sprintf-family 的函数。
您应该检查您的源代码中是否存在NULL您传递给此类函数的任何值。

于 2013-04-27T06:47:20.897 回答
-1

它是安装通用运行时 (CRT) 框架的地方。vsprintf.c 是 CRT 的一部分,该 DLL 中的某些内容调用了具有空格式字符串的 sprintf() 函数之一。

于 2013-04-27T06:48:30.747 回答