C++ c++;未处理的异常0xC0000005访问冲突读取位置0xFEEEFEEE,找不到Marshal.cxx

C++ c++;未处理的异常0xC0000005访问冲突读取位置0xFEEEFEEE,找不到Marshal.cxx,c++,winapi,visual-studio-2013,C++,Winapi,Visual Studio 2013,我制作了一个小测试程序,从文件中读入命令,通过COM端口发送这些命令(当我使用以太网套接字时,问题也会发生),并将响应写入一个新文件。我能够完整地浏览文件,并关闭文件。如果我让程序保持打开状态(在窗口循环中运行,什么都不做),我会得到这个异常 First-chance exception at 0x7670C99E (ole32.dll) in MyProgram.exe: 0xC0000005: Access violation reading location 0xFEEEFEEE 从调用

我制作了一个小测试程序,从文件中读入命令,通过COM端口发送这些命令(当我使用以太网套接字时,问题也会发生),并将响应写入一个新文件。我能够完整地浏览文件,并关闭文件。如果我让程序保持打开状态(在窗口循环中运行,什么都不做),我会得到这个异常

First-chance exception at 0x7670C99E (ole32.dll) in MyProgram.exe:
0xC0000005: Access violation reading location 0xFEEEFEEE
从调用堆栈中,我有:

如果我尝试从异常继续,它会显示“marshal.cxx未找到”

我想知道这是否是一个与这个问题类似的问题

打开命令文件时,我正在使用
GetOpenFileName()

szFileName
->命令文件名
sFileName
->日志文件名

void GetFileName(HWND hwnd)
{
    OPENFILENAME ofn;
    //char FilterSpec = "All Files(.)\0*.*\0";
    TCHAR *Title = _T("Open....");
    TCHAR szFileName[MAX_PATH];
    TCHAR szFileTitle[MAX_PATH];

    *szFileName = 0;
    *szFileTitle = 0;
    /* fill in non-variant fields of OPENFILENAME struct. */
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = GetFocus();
    ofn.lpstrFilter = _T("All Files(.)\0*.*\0");
    ofn.lpstrCustomFilter = NULL;
    ofn.nMaxCustFilter = 0;
    ofn.nFilterIndex = 0;
    ofn.lpstrFile = szFileName;
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrInitialDir = "C://Interface Card/Test Files"; //_T("."); // Initial directory.
    ofn.lpstrFileTitle = szFileTitle;
    ofn.nMaxFileTitle = MAX_PATH;
    ofn.lpstrTitle = Title;
    ofn.lpstrDefExt = _T(".");
    ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

    if (GetOpenFileName(&ofn))
    {
        LoadTextFile(szFileName);
    }

    int i = 0, j = 0;

    while (szFileName[i] != NULL)
    {
        sFileName[i] = szFileName[i];
        i++;
    }

    //Subtract .txt at end (4)
    i = i - 4;

    sFileName[i] = ' '; i++;

    time_t now = time(0);   //Get current time
    struct tm tstruct = *localtime(&now);
    char bufTime[80];

    strftime(bufTime, sizeof(bufTime), "Date %m-%d-%Y Time %I-%M", &tstruct);

    j = 0;
    while (bufTime[j] != '\0')
    {
        sFileName[i] = bufTime[j];
        i++; j++;
    }

    sFileName[i] = '.'; i++;
    sFileName[i] = 't'; i++;
    sFileName[i] = 'x'; i++;
    sFileName[i] = 't'; i++;
    sFileName[i] = '\0'; i++;
}
我打开这两个文件,如下所示:

BOOL SaveTextFile(LPCTSTR pszFileName)
{
    FileLog = fopen(pszFileName, "w");
    if (FileLog == NULL)
        return FALSE;
    else
        return TRUE;        
}

BOOL LoadTextFile(LPCTSTR pszFileName)
{
    File = fopen(pszFileName, "r");
    if (File == NULL)
        return FALSE;
    else
        return TRUE;
}
我的主窗口循环:

while (GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);

    if (isTest)
    {
        RunTest();          
    }
}
看起来上一个问题中列出的问题有一个热修复程序,但我想在应用修复程序之前确保这是我的实际问题

还有谁见过这个问题吗

这很难调试,因为我注意到,有时在调试过程中,我从未遇到异常,可能是因为我正在更改事件的时间。异常也会随机发生,有时是在测试完成后一两秒钟,有时是一分钟或更长时间


我注意到,在调试和释放模式下都会出现问题。

位模式
0xFEEEFEEE
指定已释放的内存(请参阅)。您正在访问一个已删除的对象to
OPENFILENAME of n={0}。看看是否有帮助。如前所述,该结构的某些成员包含随机垃圾;没有帮助。这是堆损坏的标准标志,与您发布的代码无关。诊断堆损坏的常见问题。死亡的代码是一个操作系统组件,它对网络接口执行某些操作。由于您保存到一个名为“接口卡”的目录中,您的程序可能会戳到一个网络接口。该代码有一个bug。不要搞热修复程序。应用程序验证程序有助于确定作恶者。也有此问题。有人找到解决办法吗?