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;
您甚至可以了解错误的一些详细信息。
我必须使用 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;
您甚至可以了解错误的一些详细信息。