关于vector::size 异常的一点经验

最近做的一个C++程序, 使用了以vector为元素的定长数组。


因为出错代码是接收gps数据后进行处理时出错的,出错的环境在客户那边,只能间接调试。

使用挂异常处理函数的方法,dmp出错的地方。windbg的出错提示是:


FOLLOWUP_IP: 
CrossBorderJudge!std::vector<MeshRoute * __ptr64,std::allocator<MeshRoute * __ptr64> >::size+10 [c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector @ 879]
00000001`3ffe6040 488b4908        mov     rcx,qword ptr [rcx+8]


MOD_LIST: <ANALYSIS/>


FAULTING_THREAD:  0000000000000a18


BUGCHECK_STR:  APPLICATION_FAULT_INVALID_POINTER_READ_WRONG_SYMBOLS


PRIMARY_PROBLEM_CLASS:  INVALID_POINTER_READ


DEFAULT_BUCKET_ID:  INVALID_POINTER_READ


FAULTING_SOURCE_CODE:  
   875: }
   876: 
   877: size_type size() const
   878: { // return length of sequence
>  879: return (this->_Mylast - this->_Myfirst);   // 这里错误
   880: }
   881: 
   882: size_type max_size() const
   883: { // return maximum possible length of sequence
   884: return (this->_Alval.max_size());


网上找了很多文章,大多说这里是多线程访问导致的问题,我分析自己的代码就是两个线程,不可能同时访问这里。

后来我想 可能是接收的gps数据导致访问数组越界,果然,写了点模拟代码,就是在size函数里面,首尾指针都是无效搞出的问题。

最后,添加边界判断的代码,搞定。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值