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