Debug Assertion Failed! File:f:\dd\vctools\crt_bld\_self_x86\crt\src\flength.c解决方式

来源:互联网 发布:饮水机清洗 知乎 编辑:程序博客网 时间:2024/06/09 22:01

 
问题:
Debug|Win32编译选项。
编译成功,在vs中使用F5或者CTRL+F5运行程序成功。
进入可执行文件的目录直接执行出现断言错误。如上图所示。


原因:
文件1.txt及2.txt存放在工程路径下,在vs使用F5或者CTRL+F5运行程序时工程可以找到这两个文件(生成可执行文件在debug目录下),运行时没有问题;但直接进入debug目录直接执行可执行文件时,由于debug目录没有1.txt及2.txt文件,

553  fpFile=fopen("1.txt","rb+");
554  handle=open("1.txt",O_RDWR);
555  lFileLen   =   filelength(handle);
556  fgets((char*)buf,lFileLen+1,fpFile);

则以上代码中553及554打开文件失败(应添加检查打开文件错误代码),使用filelength获取文件长度时会报错

Debug Assertion Failed!
File:f:\dd\vctools\crt_bld_self_x86\crt\src\flength.c
Line:46
Expressionfiledes >= 0 && (unsigned)filedes < (unsigned)_nhandle)


当将 lFileLen   =   filelength(handle);修改为lFileLen = 886;
 OraText buf[1000]={0};
 …
553  fpFile=fopen("1.txt","rb+");
554  handle=open("1.txt",O_RDWR);
555  lFileLen   =   886;
556  fgets((char*)buf,lFileLen+1,fpFile);
则会报错
Debug Assertion Failed!
File:f:\dd\vctools\crt_bld_self_x86\crt\src\fgets.c
Line:57
Expression(str != NULL)

注:File:f:\dd\vctools\crt_bld\_self_x86\crt\src\flength.c该路径在pc上不存在.内存泄露输出时,有类似f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp这种输出,这个是微软内部开发人员的开发路径,最后写入了调试信息中,对于定位具体代码,可以使用路径的后半段,然后加上VC的安装路径,即可找到对应的源代码。


 

原创粉丝点击