系统("暂停")导致堆损坏

Wil*_*ode 6 c++ program-entry-point

所以这很奇怪,可能有一个非常简单的解释,但我正在使用一台我通常不会使用VS 2010的出厂默认安装开发的机器.下面发布的代码正是我正在运行的,它引起了这个熟悉的消息:

Windows已在ProjectB.exe中触发断点.

这可能是由于堆的损坏,这表示ProjectB.exe或它已加载的任何DLL中的错误.

这也可能是由于用户在ProjectB.exe具有焦点时按下F12.

输出窗口可能包含更多诊断信息.

代码是:

#include <iostream>
#include <cstdlib>
using namespace std;

int main( int argc, char** argv )
{
    system( "pause" );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

而已!没有更多,只有一个文件.注释掉系统("暂停")不会触发中断,但我无法阻止程序退出(正如您所期望的那样).所以我真的很困惑.这对我来说似乎很奇怪,因为我以前从未经历过这种情况,我不明白为什么这会导致问题.使用另一个不会停止进程的系统命令(如system("cls"))也不会导致问题.我倾向于这是我正在研究的机器特有的,但我不确定.提前致谢!

任何帮助表示赞赏.

[编辑]

所以我以前从未调试过标准标题(至少没有故意),但我注意到一件事:

__crtCorExitProcess加载调用中,mscoree.dll模块返回一个空句柄,这意味着它没有加载.我不确定这是不是通常会发生的事情,但这样做会跳过一段获取exit proc函数指针的代码.调用此方法之后调用ExitProcess调用,并且从此处触发中断.

[编辑2]

在调用以下内容后,在输出窗口中生成以下内容system( "pause" ):ProjectB.exe中0x750cc41f处的第一次机会异常:Microsoft C++异常:> log4cxx :: helpers ::内存位置0x006ff1fc处的IOException .. ProjectB中0x750cc41f处的第一次机会异常.exe:Microsoft C++异常:> log4cxx :: helpers :: IOException在内存位置0x006ff344 .. SPLogger:setFile(C:\ ProgramData\Safend\Logs.18698\SPHook.log,true)调用失败.SPLogger:IO异常:状态代码= 720005 SPLogger:没有为名为[SPHookLog]的appender设置输出流或文件.

然后当调用ExitProcess时,会将其添加到输出窗口:

线程'Win32 Thread'(0x1ca8)已退出,代码为0(0x0).HEAP [ProjectB.exe]:HEAP:免费堆块21a4ba8在被释放后在21a4c10修改

这对我很好奇.

Wil*_*ode 1

我认为这里的问题是运行的安全软件阻止加载某些 DLL 和/或注入代码以防止执行恶意指令。由于我从未在个人计算机上经历过这种情况,并且只在正在进行大量安全管理的公司机器上经历过这种情况,所以我认为就是这样。我怀疑这是运行时不匹配,因为没有其他方法会产生意外的结果。感谢所有对潜在问题提出评论的人!如果您遇到此问题,请阅读评论,因为那里还讨论了其他潜在问题。