2011-07-18 46 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'。 –