永发信息网

C++中vector使用不当出现的错误

答案:2  悬赏:0  手机版
解决时间 2021-05-06 17:04
最近在写代码的时候,遇到随机出现的崩溃的问题,下面是代码段
void Append(const UINT8 *src,sizet cnt) //参数传入保存的数据及长度
{
if(0==cnt) return ;
if(m_Vec.size()<m_nPos+cnt) //m_nPos是用来记录位置的一个全局变量
{
m_Vec.resize(m_nPos+cnt) ;
}
CopyMemory(&m_Vec[m_nPos],src,cnt) ; //这行会出错
m_nPos += cnt ;
}
//这个函数在使用的时候会随机的出现错误,个人判断应该是越界的问题,但是从代码上看并没有什么不合适的地方,希望各位能帮我分析一下,在哪些情况下这个函数会出错?
最佳答案
vector内部有一个指向分配了的内存的指针
你copy过去造成多个vector指向堆上同一块内存
这样在析构的时候就会对同一块内存释放两次
出错是在所难免的

STL容器的使用原则之一就是:不要使用CopyMemory,memcpy之类的函数来作无差别拷贝,毕竟容器不是单纯的C结构体
全部回答
这个确实看不出问题.除非src指针指向的空间不够cnt大 m_Vec可能已经被别的地方改了,你先打印出&m_Vec[m_nPos],m_nPos,cnt,src,看看crash的时候是什么值 如果&m_Vec[m_nPos]不对,那可能就是m_Vec之前的什么地方写越界把m_Vec给改坏了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我这算是对老婆不忠吗?
怎么微笑才最迷人?
七年之痒是什么意思啊?
八个八怎样等于1000
如何使用商通卡,美通卡有什么好处?
怎样点亮全套QQ图表
qq旋舞升级难不难?
上高中要带什么东西啊?
特门乌勒宰地址有知道的么?有点事想过去
我的脚子头到底怎么了那么痛?
今天有多少人过单身节
456下一句是什么.谁知道
QQ飞车图标显示问题
让一个人安心的句子,圣经中安慰人得句子,圣
用3G无线上网卡在线看电影和下载电影那个更费
推荐资讯
BOBO组合要解散了吗?
上帝爱你我的家诗歌,我爱我家的诗歌.
DNF吉林1夺命月牙斧卖多少钱
LG的棒棒糖在上海上市了吗
男人怎么做才算个好男人
最近老是面黄 不知哪里出了问题
请问月经前3天洞房会怀孕吗?
休闲娱乐——谜语
什么是飞信?如何加入飞信?飞信要钱吗?飞信
智能机经常死机、黑屏正常吗?
主机灯亮了,显示器和键盘没反应怎么回事?(
金银花和干草冲水喝治痘吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?