【发布时间】:2019-03-06 10:38:05
【问题描述】:
我必须使用 Visual Studio 使用 Windows API 制作一个简单的程序。我的代码在调试模式下运行良好,但是在发布模式下运行不佳,我不知道为什么。我剪切并粘贴了我的程序崩溃的部分。这是那部分。
#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() 在发布模式下不能正常工作?
【问题讨论】:
-
当你说“在发布模式下不起作用”时,你的意思是编译器在构建时给你一个错误吗?如果是这样,您是否显示了完整和完整复制粘贴输出的消息?否则,你的意思是你运行程序的时候报错了吗?
-
这看起来更像是一个调试器诊断,表明启用优化的变量已被优化掉并且不可检查。
-
你已经知道isRun的值了。永远,永远不要写“它不起作用”的错误消息。绝对最小值是使用 GetLastError()。
-
编辑后的代码完全没有错误处理...
-
@TonyAhn 那么
GetLastEror()返回的错误号是多少?
标签: c windows visual-studio release-mode