在VS 2008中调用_osfile()的CRT中的断言错误?

Dan*_*aum 5 c++ crt msvcrt visual-studio-2008 visual-studio

我有一个C++代码库已经工作了很长时间.代码库是我最近迁移到VS 2008的遗留VS 2003项目集.迁移似乎是成功的,因为生成并运行了生成的程序.

我在新驱动器上重新安装了我的操作系统和所有应用程序,现在当我尝试在调试器中调试程序时,我在CRT内部收到一个断言错误chsize(真的,_chsize_s).具体而言(裁剪为必需品,忽略安全检查):

FILE * testfile = fopen("P:\\_Dan\\local\\foogoo.txt", "w");
int filehandle = fileno(testfile);
chsize(filehandle, 0);
fwrite("goohoo", 1, 6, testfile);
fclose(testfile);
Run Code Online (Sandbox Code Playgroud)

调试断言发生在chsize- 特别是在CRT的源代码文件chsize.c中,位于以下行:

 _VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE((_osfile(filedes) & FOPEN), EBADF);
Run Code Online (Sandbox Code Playgroud)

......哪里filedes比赛filehandle.

我想可能问题可能是因为没有在新系统上安装旧版本的VS(仅限VS 2008),因为一些第三方库需要VS 8.0可再发行 - 即使在旧系统上似乎正在构建和运行使用VS 2008就好了.因此我安装了VS 2005(而非2003).但是,问题仍然存在.

任何建议都会受到极大的欢迎.

*更新 - 问题与此无关chsize.请参阅下面的答案.

Dan*_*aum 5

问题已解决-与无关chsize。对于主项目,选择用于代码生成的c运行时库的链接模型设置为多线程调试(/ MTd),但对于它链接的解决方案中的所有项目,设置为多线程调试DLL(/ MDd)。至。更改为/ MDd解决了该问题。

我熟悉这些链接问题,并且通常会谨慎地正确设置它们,但是因为这是对Visual Studio早期版本的工作项目的升级,并且没有任何更改,所以我不认为应该走这条路。我没有调查更改设置的方式或原因(甚至在以前的版本中以这种方式设置但没有引起问题)。