使用vector::push_back时,Release模式发生错误void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)

这里有一篇这种错误的链接,当前并不是我本次的错误所在,只是给大家一个链接参考:http://www.tech-archive.net/Archive/VC/microsoft.public.vc.language/2009-04/msg00141.html


情况是这样的,一项目由VS2003转成VS2008后在Release模式下运行;


// 用户角色信息
typedef struct __USERINFO
{

char szTxt[1024];

}USERINFO, *PUSERINFO;


typedef struct __USERROLEINFO
{

char szDevUID[20];

vector<__USERINFO> vtUserInfo;

}USERROLEINFO, *PUSERROLEINFO;


在某个函数下:

void fun()

{

USERINFO tag;

USERROLEINFO tag1;


// VS2008Debug下不会出错, VS2003下Debug和Release都不会出错;

memset(tag, 0, sizeof(USERINFO ));

memset(tag1, 0, sizeof(USERROLEINFO ));// 只要删除这句,VS2008Release模式就不会有错; 明显,这里将vector<>对象置空了,导致指针失效;


// pushback时,在VS2008的Release下出错;

tag1.vtUserInfo.push_back(tag);

}


这个问题,让我在转项目时,足足花了几个小时才发现。所以,留个底,共享给大家。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值