我的以下代码存在问题:
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);
}
在运行时,我在调试时运行它,它在CreateProcess方法上崩溃,并显示以下错误消息:“Tests.exe中0x7c82f29c处的未处理异常:0xC0000005:访问冲突写入位置0x00415760。” /强> 这意味着什么?
答案 0 :(得分:4)
32位可执行文件的基址总是0x00400000
。根据例外{... 1},无法写入的地址。这意味着您的代码几乎肯定会尝试写入可执行映像的只读部分。例如,当您尝试写入字符串文字时会发生这种情况。
现在,CreateProcess
的第二个参数必须是可修改的内存(它被声明为0x00415760
)。但是你传递的是字符串文字。将LPTSTR
放在可修改的缓冲区中以解决您的问题。
"notepad.exe"