void CProbabilityDlg::OnInput() //建立链表

....
 tempNod=pNod=(struct sampleStruc *)malloc(LEN); 
 tempNod->sampVal=m_Sample; 
 tempNod->sampProb=m_SampProb;
 if(n_Nod==1) headNod=tempNod; 
 else pNod->next=tempNod; pNod=tempNod; 
} void CProbabilityDlg::OnResult() //遍历链表
{
pNod->next=NULL;
        .....
if(headNod!=NULL) 
  do
  {
   .........
   tempVar+=tempVar1*tempVar1*tempN->sampProb;
          tempN=tempN->next; // 这里访问headNod->next出错 ??? 
  }while(tempN!=NULL);
      ......
}插入几组数据后,为什么headNod->next域不能访问? 比如插入3组数据(1,2),(3,4),(5,6)。
哪位热心人能否留下邮箱,我把程序发你您帮我查查!

解决方案 »

  1.   

    void CProbabilityDlg::OnInput() //每点击"输入"按钮一次可以输入一个节点的数据,建立链表
    {
    // TODO: Add your control notification handler code here
            CString strSamp,strSampProb, strtemp;
    struct sampleStruc *tempNod; UpdateData(true);        n_Nod++;
    tempNod=pNod=(struct sampleStruc *)malloc(LEN);
    tempNod->sampVal=m_Sample;
    tempNod->sampProb=m_SampProb; if(n_Nod==1) headNod=tempNod;
    else pNod->next=tempNod;
    pNod=tempNod;
    sumProb+=m_SampProb; strSamp.Format("%.3f",m_Sample);
    strSampProb.Format("%.3f",m_SampProb);
    strtemp=strSamp+"   "+strSampProb; m_List.AddString(strtemp);
    m_SumSampProb=sumProb;        m_tempExcept+=m_Sample*m_SampProb;
    UpdateData(false);
    }void CProbabilityDlg::OnResult() ////点击"计算"按钮时可以计算,遍历链表
    {
    // TODO: Add your control notification handler code here
    pNod->next=NULL; struct sampleStruc *tempN;
    float tempVar=0;
    float tempVar1;
            tempN=headNod; if(headNod!=NULL) 
      do
      {
      tempVar1=0;
      tempVar1=(tempN->sampVal - m_tempExcept);
      tempVar+=tempVar1*tempVar1*tempN->sampProb;
              tempN=tempN->next;    
      }while(tempN!=NULL);        m_SampDelta=float(sqrt(tempVar));
            m_Exception=m_tempExcept; UpdateData(true);
    }
      

  2.   

     感谢3位仁兄指点!错误原因分析:1)// tempNod=pNod=(struct   sampleStruc   *)malloc(LEN); //重大错误!!!!
       // tempNod,pNod均指向最后一个节点,并形成自循环
       // headNod 指向第一个节点,其后为非法节点
       // 错误原因为本来pNod用来保存原最后一个节点,现在每次都赋新值,旧址没有保存!!!2)tempNod->next=NULL;  //如果没有的话,将导致 tempN=tempN-> next; 
                            // 出错的原因是新节点的后面都要=NULL;
                               //另外NEW新节点要赋NULL3)// UpdateData(true); // 汗颜的错误