CreateProcess方法以错误结尾

Inb*_*ali 5 c operating-system process

我的以下代码有问题:

int main(int argc, char **argv) {
  PROCESS_INFORMATION pi;  
  STARTUPINFO si;     

  printf("Process %d reporting for duty\n",GetCurrentProcessId());
  GetStartupInfo(&si);
  CreateProcess(NULL,"notepad.exe", NULL,NULL,FALSE,DETACHED_PROCESS, NULL,NULL, &si, &pi);
  printf("New Process ID: %d\n",pi.dwProcessId);
  return(0);
}        
Run Code Online (Sandbox Code Playgroud)

并且在运行时,我在调试时运行了该程序,它在CreateProcess方法上崩溃,并显示以下错误消息:“ Tests.exe中0x7c82f29c的未处理异常:0xC0000005:访问冲突写入位置0x00415760。” 这是什么意思???

Dav*_*nan 5

32位可执行文件的基址始终为0x00400000。根据例外情况,无法写入的地址是0x00415760。这意味着您的代码几乎肯定会尝试写入可执行映像的只读部分。例如,当您尝试写入字符串文字时,就会发生这种情况。

现在,第二个参数to CreateProcess必须是可修改的内存(它声明为LPTSTR)。但是,您正在传递字符串文字。放入"notepad.exe"可修改的缓冲区以解决您的问题。

char CommandLine[] = "notepad.exe";
CreateProcess(NULL, CommandLine, ...
Run Code Online (Sandbox Code Playgroud)