Visual Studio 释放模式导致意外错误

Visual Studio Release Mode causes unexpected error

我必须使用 Windows API 使用 visual studio 制作一个简单的程序。我的代码在调试模式下运行良好,但是在发布模式下运行不佳,我不明白为什么。我剪切并粘贴了程序崩溃的部分。这是那部分。

#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <windows.h> 

int _tmain(int argc, TCHAR * argv[])
{
    TCHAR cmdString[] = "notepad.exe";
    STARTUPINFO si = { 0, };
    PROCESS_INFORMATION pi;

    si.cb = sizeof(si);

    BOOL ret = TRUE;
    CreateProcess(NULL, cmdString, NULL, NULL, TRUE,
        CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

    _tprintf(_T("Error = {%d}\n", GetLastError()));

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    system("pause");

    return 0;

}

打开 notepad.exe 的简单程序,对吧?在调试模式下运行良好,但记事本在发布模式下无法打开(程序未打开就结束 notepad.exe)。

我试图在 S.O 中找到解决方案,例如 但它对我帮助不大。

为什么 CreateProcess() 在发布模式下不能正常工作?

我的猜测是,这全都与编译器优化有关,因为 this post 可以告诉您比我更好的方法。

因为 CreateProcess 返回(成功时)非零值。

试试这样使用它:

BOOL ret = TRUE;
if(!CreateProcess(NULL, cmdString, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
      printf("Error = {%d}", GetLastError());
      ret = FALSE;

您甚至可以了解错误的一些详细信息。