Microsoft Visual Studio C 运行时库在 XXX.exe 中检测到一个错误

以下内容转载http://blog.csdn.net/yuzhiyi926/article/details/7239675

现象:

Microsoft Visual Studio C 运行时库在 arctic.exe 中检测到一个错误。

按“中断”以调试程序,或按“继续”以终止程序。

当点击中断调试的时候,程序会执行到绿色这一行:

void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)

{

  /* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */

  (_Reserved);

  _debugger_hook_dummy = 0;

}

原因:

其实这个错误的原因主要是因为内存空间的重复分配时发生错误(或内存访问异常)。

如下面:

CString str = L"aaaaaaaaa"; 或者 str.Format(L"%s",L"aaaaaaaaaa");

str.Format(L"%s%s",str,L"bbbbbbb");

 

这样子就会导致上面的错误信息。这是因为用FORMAT会在内部根据格式化参数列表对字符串本身的内在空间进行重新分配

而如果直接采用字符串本身作为参数传入的话,会造成内在的冲突,而这个冲突是无法遇见的,即不会经常出现。所以,为了避免上面的问题,应避免使用上述的方法。

 

CString temp= L"aaaaaaaaa"; 或者 temp.Format(L"%s",L"aaaaaaaaaa");

str.Format(L"%s%s",temp,L"bbbbbbb");

只需多采用一个变量即可。

 

* 注意:避免将字符串本身作为参数传入到使用FORMAT格式化列表的原来字符串中。

 

另外,还有一些情况是从网上找的,不知道是否真的是这样,没有进行验证,仅供参考。

 

1.在很短的时间内创建多线程...

 

for (int i =0; i < 100; i++)

 

HANDLE handle = CreateThread(.....);

 

在1秒内一下子创建几十个线程有可能出现这种状况。

 

2. 在很短时间内访问同一个文件的操作,同时没有加锁

 

和1差不多吧,

 

3.多线程在很短的时间间隔内共同操作用户界面

你可能感兴趣的:(MFC,C,运行库检测到一个错误,visual,studio,cstring,漏洞,内存)