C++ 逻辑错误:无法确定分段错误的原因 for(i=(routeVector.size()-1);i>=0;i--) { cout(0) { 这取决于i和j的类型-如果i和j是无符号的,上述循环将非常愉快地循环-这可能是正在进行的-打印索引,您将看到…它是什么类
逻辑错误:无法确定分段错误的原因C++ 逻辑错误:无法确定分段错误的原因 for(i=(routeVector.size()-1);i>=0;i--) { cout(0) { 这取决于i和j的类型-如果i和j是无符号的,上述循环将非常愉快地循环-这可能是正在进行的-打印索引,您将看到…它是什么类,c++,segmentation-fault,C++,Segmentation Fault,逻辑错误:无法确定分段错误的原因 for(i=(routeVector.size()-1);i>=0;i--) { cout(0) { 这取决于i和j的类型-如果i和j是无符号的,上述循环将非常愉快地循环-这可能是正在进行的-打印索引,您将看到…它是什么类型的exitPoint和connectedExitPoint成员?如果是类,问题也可能出在它的运算符==()函数中。@User1我已修改了代码,请参见上文。I和j的类型是什么?如果类型为无符号且routeVector为空,则(routeVect
for(i=(routeVector.size()-1);i>=0;i--)
{
cout(0)
{
这取决于i
和j
的类型-如果i
和j
是无符号的
,上述循环将非常愉快地循环-这可能是正在进行的-打印索引,您将看到…它是什么类型的exitPoint和connectedExitPoint成员?如果是类,问题也可能出在它的运算符==()函数中。@User1我已修改了代码,请参见上文。I和j的类型是什么?如果类型为无符号且routeVector
为空,则(routeVector.size()-1)
是肯定的。@User1-正如我在回答中所说的,我猜这也是问题所在。您显示的代码中没有任何错误。因此,问题出在您未显示的代码中。请发布一个最小的、完整的、可编译的、可运行的示例来展示问题……分段错误的原因是此时,程序正在访问超出边界的路由向量元素。@Nim确实,这就是问题所在,非常感谢。i和j是无符号int
。
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;
}
}
}
}
typedef struct branch
{
unsigned int distance;
int connectedExitPoint;
} branch;
typedef struct route
{
int exitPoint;
vector <branch> selectedBranchesVector;
} route;
vector <route> routeVector;