C++ c++;未处理的异常0xC0000005访问冲突读取位置0xFEEEFEEE,找不到Marshal.cxx
我制作了一个小测试程序,从文件中读入命令,通过COM端口发送这些命令(当我使用以太网套接字时,问题也会发生),并将响应写入一个新文件。我能够完整地浏览文件,并关闭文件。如果我让程序保持打开状态(在窗口循环中运行,什么都不做),我会得到这个异常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 从调用
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
指定已释放的内存(请参阅)。您正在访问一个已删除的对象toOPENFILENAME of n={0}代码>。看看是否有帮助。如前所述,该结构的某些成员包含随机垃圾;没有帮助。这是堆损坏的标准标志,与您发布的代码无关。诊断堆损坏的常见问题。死亡的代码是一个操作系统组件,它对网络接口执行某些操作。由于您保存到一个名为“接口卡”的目录中,您的程序可能会戳到一个网络接口。该代码有一个bug。不要搞热修复程序。应用程序验证程序有助于确定作恶者。也有此问题。有人找到解决办法吗?