2011-05-03 118 views
-1

我得到下面的代碼段故障:C++分割故障for循環

Node *pointerArray[6]; 
    int onesNeighbor[]={2,3,6}; 

    Node *createNode(int localDistance)//////creates a node 
    { 
Node *newNode; 
newNode=new Node; 
newNode->wasVisited=false; 
newNode->shortestDistance=localDistance; 


return newNode; 
    } 

    void insertNode(Node *n,int i)//////////////////connects nodes to the 
    {/////////////////////////////////////////array of pointers 
    pointerArray[i]=n; 
    } 


for(i=1;i<7;i++) 
{ 
    if(i==1){ 
    n=createNode(0); 
    cout<<i<<"\t"<<n->shortestDistance<<"\t"; 
    for(int j=0;j<=2;j++) 
    cout<< onesNeighbor[j]<<","; 
    cout<<endl; 


    for (count = 1; count < 2; count++) 
    { 
    current = pointerArray[count]; 

    if (count == 1) 
    { 
     for (int j = 0; j <= 2; j++) 
     { 
      lowest = current->shortestDistance; 
      current = pointerArray[onesNeighbor[j]]; 

      if (current->shortestDistance < lowest) 
      { 
       lowest = current->shortestDistance; 
       closestNeighbor = onesNeighbor[j]; 
      } 
     } 
     } 
     } 

請幫助.....

+2

線段故障發生在哪條線上? – TheFuzz 2011-05-03 00:53:23

+2

我們需要看到'pointerArray'和'onesNeighbor'的聲明能夠準確地告訴你,但基本上,其中一個數組要麼太小,要麼是一個野指針 - 可能是後者。 – 2011-05-03 00:53:30

+0

當前寫入的COde永遠不會到達內部循環,因爲在第一次迭代開始時count將爲2。 – Joe 2011-05-03 01:45:23

回答

4

作爲一個完全失明的猜測,而2個陣列的聲明,由於一次錯誤導致它們失敗而導致。 j<=2應該是j<2和/或count=1應該是count=0。只是我嘗試進行心理調試。

更新:新版本沒有更清晰 - 你喜歡留下太多的想象力。沒有調用insertNode,所以任何嘗試deref指針數組可能seg-fault。這是問題中的錯字,還是您看到的seg-fault的原因?另外,最外層的循環從1到7迭代 - 是否應該對應於pointerArray?如果是這樣,如果你打算調用insertNode作爲第二參數傳遞i,那麼0-6可能更有意義。你有編譯的代碼嗎?