CopyFile() 函数在调试时导致异常,但在来自终端的 运行 时不会

CopyFile() function causes exception while debugging but not while running from terminal

我有一个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。

另一方面,如果我 运行 通过终端 ./copyFile.exe .exe,则不会抛出异常,并且代码会继续执行到以下行。正在创建文件xyzCopy.txt,内容已满(非空),但创建时间戳与原始文件相同。调试时对比案例

此外,如果CopyFile()失败,例如因为无法找到要复制的源文件,调试工作正常。因此,仅当 CopyFile() 成功时才会出现问题。

我不知道是怎么回事。感谢您的帮助。

我找不到根本原因,但是,@SimonMourier 在他的评论中发布了一个 link,这表明一个可行的解决方法。

Additional information: Toggling the debug option "Automatically close the console when debugging stops" on, stops the exception being thrown.