急!vector对象push_back访问冲突?网络客户端多线程接收数据

coding小学生 2015-07-09 11:39:12
一个基于对话框的网络客户端程序,接收仪器发来的数据,在OnReceive()函数中,一旦有数据来先把数据存在一个BYTE数组中,然后开启一个工作线程处理数据,定义了一个全局变量vector<POINT3D> m_pts,处理好的数据往里面push。debug模式程序运行约5、6秒钟出现中断提示,访问冲突(此时,m_pts的size已经有6万多)。但是release时没用出现问题,不知原因为何?已经困扰多时,还望大神速来指点!谢谢~
...全文
227 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
coding小学生 2015-11-27
引用 11 楼 zwm291925521 的回复:
遇到同样的问题,vector的内容用指针就没有问题,然后push_back加锁就可以了
你说的vector的内容用指针是指访问vector元素用*itr访问?
回复
hwd2013 2015-11-25
遇到同样的问题,vector的内容用指针就没有问题,然后push_back加锁就可以了
回复
jiqiang01234 2015-07-10
很可能是push_back()之前内存已经出问题了,所以表现在push_back()时出错,并非是push_back()本身的问题
回复
coding小学生 2015-07-10
引用 5 楼 luxiaolai861227 的回复:
vector用的是栈空间,内存空间连续,所以访问速度比较快。 你要是数据量过大,可以用list
不会吧,vector应该是堆吧? 内存冲突是不是跟调试时默认的堆栈空间太小有关?或者是释放内存时出现问题?
回复
处处留心 2015-07-10
vector用的是栈空间,内存空间连续,所以访问速度比较快。 你要是数据量过大,可以用list
回复
coding小学生 2015-07-10
引用 2 楼 xian_wwq 的回复:
多线程操作公有变量,先加锁
你的意思是怕数据在别的线程中也被访问?但是这个vector对象只在这个工作线程中进行push——back,别处没有操作和访问
回复
coding小学生 2015-07-10
引用 1 楼 zgl7903 的回复:
停在 std::allocator 处, 可能是分配内存错误了吧 处理后的数据尽快提走 或者是优化存储结构, vector虽然使用方便,但是每一个单元都消耗维护所使用的内存, 稍作变通,可以把数据分组,比如每1K个数据作为1个单元,这样维护的消耗比例就下降了很多
你的意思是怕数据在别的线程中也被访问?但是这个vector对象只在这个工作线程中进行push——back,别处没有操作和访问
回复
xian_wwq 2015-07-10
多线程操作公有变量,先加锁
回复
coding小学生 2015-07-10
引用 9 楼 赵4老师的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
没看图么?
回复
赵4老师 2015-07-10
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
回复
coding小学生 2015-07-10
引用 7 楼 jiqiang01234的回复:
很可能是push_back()之前内存已经出问题了,所以表现在push_back()时出错,并非是push_back()本身的问题
我在对话框类的构造函数中加了个m_pts.release(1024000),但是运行一段时间后,接收的数据放不下,还是出现前面的问题。也就是说vector对象自己不能调整存储空间?可是为什么呢
回复
zgl7903 2015-07-10
停在 std::allocator 处, 可能是分配内存错误了吧 处理后的数据尽快提走 或者是优化存储结构, vector虽然使用方便,但是每一个单元都消耗维护所使用的内存, 稍作变通,可以把数据分组,比如每1K个数据作为1个单元,这样维护的消耗比例就下降了很多
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2015-07-09 11:39
社区公告
暂无公告