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

Microsoft Visual Studio C 运行时库在 XXXX.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.多线程在很短的时间间隔内共同操作用户界面

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值