我有一個長期工作的C++代碼庫。代碼庫是我最近遷移到VS 2008的傳統VS 2003項目集合。遷移似乎是成功的,因爲生成的程序已經建立並運行。CRT中調用_osfile()在VS 2008中的聲明錯誤?
我重新安裝了操作系統和新的驅動器上的所有應用程序,而現在當我嘗試在調試器中調試程序,我收到內部的斷言錯誤的CRT的chsize
(真的,_chsize_s
)。具體而言(裁剪爲要領,忽略安全檢查):內chsize
發生
FILE * testfile = fopen("P:\\_Dan\\local\\foogoo.txt", "w");
int filehandle = fileno(testfile);
chsize(filehandle, 0);
fwrite("goohoo", 1, 6, testfile);
fclose(testfile);
調試斷言 - 具體地,CRT的源代碼文件chsize.c內,在下面的行:
_VALIDATE_CLEAR_OSSERR_RETURN_ERRCODE((_osfile(filedes) & FOPEN), EBADF);
。 ..其中filedes
匹配filehandle
。
我認爲這個問題可能是由於沒有在新系統上安裝VS的舊版本(僅適用於VS 2008),因爲一些第三方庫需要VS 8.0可再發行 - 即使在舊系統上似乎使用VS 2008構建和運行得很好。因此,我安裝了VS 2005(不是2003)。但是,問題仍然存在。
任何建議將非常受歡迎。
*更新 - 問題與chsize
無關。請參閱下面的答案。
由於你裁剪它,你能證實你測試過testfile!= NULL嗎?此外,請注意,MSDN文檔聲稱從VS2005開始,chsize已棄用:http://msdn.microsoft.com/zh-cn/library/ms235502(v=VS.90).aspx - 它們提供了替代方法。 – holtavolt 2011-05-12 22:11:13
感謝提問 - 是的,我確實仔細確認了testfile!= null。無論如何 - 我解決了這個問題 - 與選擇c-runtime線程模型不一致(請參閱我的答案),並與chsize無關。 – 2011-05-15 19:26:50