我有一個 Visual Studio 2019 專案,只包含一個 .cpp 檔案,名為 copyFile.cpp
#undef UNICODE
#include <iostream>
#include <Windows.h>
int main()
{
std::cout << "Hello World!\n";
DWORD ret = CopyFile("xyz.txt", "xyzCopy.txt", FALSE);
printf("\n\t ret: %d, getlasterror(): %d", ret, GetLastError());
return 0;
}
除錯代碼時出現問題,跨過這一行:
DWORD ret = CopyFile("xyz.txt", "xyzCopy.txt", FALSE);
導致拋出例外。
Exception thrown at 0x76E4B1AF (combase.dll) in copyFile.exe : 0xC0000005: Access violation reading location 0x00000008
然后程式中斷。
同時,xyzCopy.txt正在創建,具有全新的修改日期但為空檔案,0 KB。
另一方面,如果我通過終端通過 .exe 運行 .exe ./copyFile.exe,則不會引發例外,并且代碼執行將繼續到以下幾行。xyzCopy.txt正在創建檔案,內容已滿(非空),但創建時間戳與原始檔案相同。與除錯時的情況對比。
此外,如果CopyFile()失敗,例如因為找不到要復制的源檔案,除錯作業正常。所以,只有CopyFile()成功了才會出現問題。
我不知道這是怎么回事。謝謝你的幫助。
uj5u.com熱心網友回復:
但是,我找不到根本原因,@SimonMourier在他的評論中發布了一個鏈接,這表明了一種有效的解決方法。
附加資訊:切換除錯選項“除錯停止時自動關閉控制臺”,停止拋出的例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314731.html
標籤:C 视窗 视觉工作室 登录 视觉工作室-2019
