C++中关于assign 0 to _debugger_hook_dummy so that the function is not folded in retail的错误

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

今天在运行程序时出现这个错误,我找了好久才发现这个问题所在,我把自己的一个关于字符串转换的函数注销后运行就正常了
 
在编译MFC时有时候出现下面的错误。

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"userDefined"; 或者 str.Format(L"%s",L"userDefined");

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

这样子就会导致上面的错误信息。这是因为用FORMAT会在内部根据格式化参数列表对字符串本身的内在空间进行重新分配
而如果直接采用字符串本身作为参数传入的话,会造成内在的冲突,而这个冲突是无法遇见的,即不会经常出现。

所以,为了避免上面的问题,应避免使用上述的方法。

CString temp= L"userDefined"; 或者 str.Format(L"%s",L"userDefined");

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

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

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

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

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

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

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

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

和1差不多吧,

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值