【发布时间】:2011-05-12 20:35:40
【问题描述】:
我有一个已经工作了很长时间的 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);
调试断言发生在 chsize 中 - 具体来说,在 CRT 的源代码文件 chsize.c 中的以下行:
_VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE((_osfile(filedes) & FOPEN), EBADF);
...filedes 匹配 filehandle。
我认为问题可能是由于新系统上没有安装旧版本的 VS(仅限 VS 2008),因为一些第 3 方库需要 VS 8.0 可再发行版 - 即使在旧系统上似乎是使用 VS 2008 构建和运行得很好。因此我安装了 VS 2005(不是 2003)。但是,问题仍然存在。
非常欢迎任何建议。
* 更新 - 该问题与 chsize 无关。请参阅下面的答案。
【问题讨论】:
-
既然你把它剪下来了,你能确认你测试了那个testfile!= NULL吗?另外,请注意 MSDN 文档说 chsize 自 VS2005 起已弃用:msdn.microsoft.com/en-us/library/ms235502(v=VS.90).aspx - 他们提供替代方案。
-
感谢您的提问 - 是的,我确实仔细确认了 testfile != null。无论如何 - 我解决了这个问题 - 涉及 c-runtime 线程模型选择的不匹配(请参阅我的答案),并且与 chsize 无关。
标签: c++ visual-studio visual-studio-2008 msvcrt crt