Visual Studio发布模式导致意外错误

时间:2018-10-01 10:22:37

标签: c windows visual-studio release-mode

我必须使用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中寻找解决方案,例如this link,但这并没有太大帮助。

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

1 个答案:

答案 0 :(得分:2)

我的猜测是,所有这些都与编译器优化有关,因为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;

您甚至会获得有关该错误的一些详细信息。