永发信息网

C++ Vector.resize() 导致的CopyMemory()出错问题

答案:6  悬赏:0  手机版
解决时间 2021-04-08 13:06
  • 提问者网友:你独家记忆
  • 2021-04-08 01:52
最近在写代码的时候,遇到随机出现的崩溃的问题,下面是代码段
void Append(const UINT8 *src,sizet cnt) //参数传入保存的数据及长度
{
if(0==cnt) return ;
if(m_Vec.size() {
m_Vec.resize(m_nPos+cnt) ;
}
CopyMemory(&m_Vec[m_nPos],src,cnt) ; //这行会出错
m_nPos += cnt ;
}
//这个函数在使用的时候会随机的出现错误,个人判断应该是越界的问题,但是从代码上看并没有什么不合适的地方,希望各位能帮我分析一下,在哪些情况下这个函数会出错?
想一下就可以了,比如原来m_Vec有5个数据,则最大到m_Vec[4],m_nPos=4

想再加5个元素的话,m_Vec.resize(m_nPos+cnt) ;也就是m_Vec.resize(9) ;

其实只有9个元素,最大到m_Vec[8]

这个回答不大对啊..照您说的因为我最多只取到了m_Vec[m_nPos] 也就是说 m_Vec[5]这样是不应该出错的啊
最佳答案
  • 五星知识达人网友:白昼之月
  • 2021-04-08 03:02
不是大小的问题
vector不能用CopyMemory来拷贝内存
因为他是个类,其内存分布比数组相对复杂一些,不能使用内存拷贝,拷贝的话会导致其类成员变量被覆盖导致一些异常
可以使用循环下标赋值

for(int i=0;i m_Vec[m_nPos+i]=src[i];
全部回答
  • 1楼网友:舊物识亽
  • 2021-04-08 06:10
多加一个就应该没有问题了. 就是说if句成立时 m_Vec.resizze(m_nPos+cnt+1)
  • 2楼网友:西风乍起
  • 2021-04-08 05:27
resize()函数会使迭代器失效。如果你的m_nPos是依赖迭代器的话,同样也会失效。
  • 3楼网友:傲气稳了全场
  • 2021-04-08 05:07
Vector好歹也是个类,我就觉得直接拷贝内存感觉有点奇怪,而且作为vector他的size代表元素的个数吧,你的cnt代表什么呢?是已经计算好长度了吗?,我用vector从来都是插进去的,没有玩过resize
  • 4楼网友:野慌
  • 2021-04-08 04:54
不知道你m_nPos怎么取得,有问题hi我吧 —————————————————————————— 想一下就可以了,比如原来m_Vec有5个数据,则最大到m_Vec[4],m_nPos=4 想再加5个元素的话,m_Vec.resize(m_nPos+cnt) ;也就是m_Vec.resize(9) ; 其实只有9个元素,最大到m_Vec[8]
  • 5楼网友:十年萤火照君眠
  • 2021-04-08 04:13
你好! 不知道你m_nPos怎么取得,有问题hi我吧 —————————————————————————— 想一下就可以了,比如原来m_Vec有5个数据,则最大到m_Vec[4],m_nPos=4 想再加5个元素的话,m_Vec.resize(m_nPos+cnt) ;也就是m_Vec.resize(9) ; 其实只有9个元素,最大到m_Vec[8] 希望对你有所帮助,望采纳。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯