急!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时没用出现问题,不知原因为何?已经困扰多时,还望大神速来指点!谢谢~
...全文
442 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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个单元,这样维护的消耗比例就下降了很多

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧