使用Vector中动态创建按钮:
CColorButton * pColorBt = new CColorButton;
pColorBt->Create("", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|WS_TABSTOP|BS_OWNERDRAW, 
CRect(nBeginX, nBeginY, nBeginX + nWidth, nBeginY + nHeight), this, m_nShowButtonID);
m_vector.push_back(pColorBt);
一共加载了多个按钮并显示,每个按钮需要根据网络数据绘制按钮的显示信息,程序运行大概10分钟左右,CColorButton 中的某个变量突然值变了,再等会软件就直接弹出断言,而且断言处都是系统的函数,根本没有办法调试,请各位大侠帮忙,分管够vector    cbuttonshiyong

解决方案 »

  1.   

    多线程操作vector引起的吧  vector不是线程安全的  还有你的m_nShowButtonID在自增的吧? 不然按钮都是同一id了
      

  2.   

    nShowButtonID++是自增的,并没有通过多线程操作vector,我在CColorButton中自绘整个按钮,每秒有可能绘制3,4次,
    谢谢
    vector不是线程安全的,可以用什么代替吗?
      

  3.   

    断言处都是系统的函数。出现assert对话框时点击  重试,看看是哪个函数的问题
      

  4.   

    是你Button  delete完了又操作了?
      

  5.   

    借助工具,传闻万能的windbg可以,但没试过。
    二分法,注释掉一部分代码,看是否正常,然后逐渐缩小范围,这种错误排查起来很麻烦。
    重点看vector的操作,有没有多线程操作而没有加锁,vector的有些方法会导致迭代器失效,看是否使用了失效的迭代器。
      

  6.   

    Create几个button要10分钟左右,你不是要把微软往死里整么?
      

  7.   

    多打印一些Log,或者单步调试,查看各个变量
      

  8.   

    纠结了快一周了   通过网络发送数据更新按钮状态:
    如果按钮改变状态使用本机模拟网络消息,则没有问题,如果下端接的是下位机就有问题,相当郁闷
    如果我按钮不用vector作为容器,有别的比较简单的办法吗
      

  9.   

    CColorButton 是自己写的?
    显示刷新时的资源都正确释放了吧处理网络数据的线程不是主线程吧
    用PostMessage之类的放到主线程去操作
    你本机模拟网络消息,使用的是Timer,不是多线程吧