2011-07-18 72 views
0
for (i = (routeVector.size() - 1); i >= 0; i--) 
    { 
     cout << "Connected to -> " << routeVector[i].exitPoint; 
     for (j = (routeVector.size() - 1); j >= 0; j--) 
     { 
      if (routeVector[i].selectedBranchesVector.size() > 0) 
      { 
       cout << "\n: routeVector[i].selectedBranchesVector[0].connectedExitPoint" << 
routeVector[i].selectedBranchesVector[0].connectedExitPoint; 

       ******cout << "\nrouteVector[j].exitPoint:" << routeVector[j].exitPoint; 
       if (routeVector[i].selectedBranchesVector[0].connectedExitPoint == routeVector[j].exitPoint) 
       { 
        cout << "Connected to -> " << routeVector[i].selectedBranchesVector[0].connectedExitPoint; 
       } 
      } 
     } 
    } 

盯着的線條給我一個分段錯誤,我不明白爲什麼。邏輯錯誤:無法確定分段錯誤的原因

如果「routeVector」事中「selectedBranchesVector」,它不會有甚至殺入內線,如果。

上述問題的原因是什麼?

EDIT 1:

爲了使問題更清楚,我打印出該語句的兩個條件,並顯示在盯着線的誤差。

的結構是:

typedef struct branch 
{ 
    unsigned int distance; 
    int   connectedExitPoint; 
} branch; 

typedef struct route 
{ 
    int exitPoint; 
    vector <branch> selectedBranchesVector; 
} route; 

vector <route> routeVector; 
+1

它是什麼類型的exitPoint和connectedExitPoint成員? 如果是類,問題可能也在它的operator ==()函數中。 – SKi

+0

@ User1我修改了代碼,參見上文。 –

+2

什麼是i和j的類型?如果這個類型是無符號的並且'routeVector'是空的,那麼'(routeVector.size() - 1)'是肯定的。 – SKi

回答

1

這是依賴於ij類型 - 如果ijunsigned,上述循環將回到身邊很愉快 - 這大概是怎麼回事 - 打印索引,你會看到...

+0

...以及分段錯誤的原因是程序正在訪問邊界外的路由向量元素。 –

+0

@Nim確實,這是問題,非常感謝。我和j是'unsigned int'。 –