c-第一次机会异常:KernelBase.dll



我正在尝试用VS2012 Pro构建并运行这段程序。

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    //allocate memory
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    //create child process
    if (!CreateProcess(NULL,    //use command line
             L"mspaint.exe",    //command line
             NULL,    //don't inherit process handle
             NULL,    //don't inherit thread handle
             FALSE,    //disable handle inheritance
             0,        //no creation flags
             NULL,    //use parent's environment block
             NULL,    //use parent's existing directory
             &si,
             &pi))
    {
        fprintf(stderr, "Create Process Failed");
        return -1;
    }
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    return 0;
}

我得到这个错误:

"ConsoleApplication1.exe"(Win32):已加载"G:\workspace\VS2012\ConsoleApplication1\Debug\ConsoleApplication 1.exe"。已加载符号。

"ConsoleApplication1.exe"(Win32):已加载"C:\Windows\SysWOW64\ntdll.dll"。找不到或打开PDB文件。

"ConsoleApplication1.exe"(Win32):已加载"C:\Windows\SysWOW64\kernel32.dll"。找不到或打开PDB文件。

"ConsoleApplication1.exe"(Win32):已加载"C:\Windows\SysWOW64\KernelBase.dll"。找不到或打开PDB文件。

"ConsoleApplication1.exe"(Win32):已加载"C:\Windows\SysWOW64\msvcr110d.dll"。已加载符号。

ConsoleApplication1.exe中0x763919E3(KernelBase.dll)处的首次机会异常:0xC0000005:写入位置0x00CB586E的访问冲突。

ConsoleApplication1.exe中0x763919E3(KernelBase.dll)处未处理的异常:0xC0000005:写入位置0x00CB586E的访问冲突。

程序"[6992]ConsoleApplication1.exe"已退出,代码为0(0x0)。

请注意,我构建它时没有任何错误(文件stdafx.h包含我需要的所有头)。

我搜索了这个错误,但找不到任何解决方案,而且这只是一个简单的程序,所以我不明白这里的问题是什么:(.

请帮帮我。

来自CreateProcessW文档,特别是关于您的第二个参数:

此函数的Unicode版本CreateProcessW可以修改此字符串的内容。因此,此参数不能是指向只读内存(如常量变量或文字字符串)的指针。如果此参数是一个常量字符串,则函数可能会导致访问违规

因此,在回答您的问题时,不要将常量字符串文本作为第二个参数传递给该函数,否则您将获得AV。

最新更新