我在自己的一个CTreedlg里面定义了一个vector<CPoint>point;
然后在CTreedlg的一个函数里随机生成10个点,并放在point容器.
  void CTreeDlg::OnBnClickedOk()
{

srand( (unsigned)time( NULL ) );
int n=100;
   
   for(int i=0,int n=100;i<=9;i++,n+=50)
   { 
   CPoint ppp(rand()%n,rand()%n);
   
   point.push_back(ppp);
   } //OnOK();
}
然后在CstreView类里的ondraw函数里访问,
void CstreView::OnDraw(CDC* pDC)
{
CstreDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; // TODO: 在此处为本机数据添加绘制代码
    for(int i=1;i<=5;i++)
  {
  pDC->MoveTo(Dlg.point[i]);//Dlg为CstreView的成员函数
     pDC->LineTo(Dlg.point[i+3]);
  }
 
 }可是在编译链接时发生内存冲突,并且指向  pDC->MoveTo(Dlg.point[i]);pDC->LineTo(Dlg.point[i+3]);
请问这是怎么回事啊

解决方案 »

  1.   

    你这个Dlg是哪里来的呢?什么东西呢?是否有效呢?
      

  2.   

    Dlg为CstreView里定义的一个成员变量CTreedlg Dlg;  谢谢关注。。继续请高手解答。。
      

  3.   

    这个问题很简单,我来结贴吧。:)
    从你得函数名OnBnClickedOk()猜测,是点击button后的操作,而OnDraw()函数在你点之前已经操作了,所以是越界访问了!!!!
    你可以尝试将初始化放在窗体的构造函数里面看看。
    顺便说一下你的描述:“编译链接时发生内存冲突”,这个编译过程中怎么会发生内存冲突呢,
    程序没有运行前你的程序还没有载入内存就冲突了,这样的话是很牛的,呵呵。。