[英]Getting segmentation fault in loop
我对这段代码有问题:
while(true){
BCNP(CBCV[CBCV.size()-1]);
CBCV.pop_back();
printf("BCN : %f\n", BCN());
for(int q = 0; q < numNode; q++){
CurrentNode = ((MobileNode*)Node::get_node_by_address(q));
if(CurrentNode->ConditionNeighbor == BCN()){
printf("currentnode : %f\n", CurrentNode->ConditionNeighbor);
tcl.evalf("$ns_ at %f \"$node_(%d) color red\"",NOW,CurrentNode->nodeid());
tcl.evalf("$ns_ at %f \"$node_(%d) label \\\"CH\\\"\"",NOW,CurrentNode->nodeid());
break;
}
}
CurrentNode->isCluster = true;
for(int q = 0; q < CurrentNode->NodeQueue; q++){
neighbor = ((MobileNode*)Node::get_node_by_address(CurrentNode->neib[q]));
//if(neighbor->isCluster == false){
neighbor->chFlag = true;
CurrentNode->chFlag = true;
neighbor->cluster = CurrentNode->nodeid();
//printf("chFlag True : %d\n", neighbor->nodeid());
//}
}
notRouted_ = 0;
for(int q = 0; q < numNode; q++){
CurrentNode = ((MobileNode*)Node::get_node_by_address(q));
if(CurrentNode->chFlag == false){
notRouted_++;
//printf("CurrentNode : %d\n",CurrentNode->nodeid());
}
}
}
它给了我一个分段错误,但我不知道我在哪里遗漏了什么......
似乎未定义变量,并且在循环中它将使用该变量,这就是我收到此错误的原因...
我昨晚根本没睡,现在我的思绪正在关闭,我真的需要帮助。
如果有人给我一个关于这个错误的想法,那将是最好的。
void BCNP(double bcneighb){ BCN_ = bcneighb; };<br/>
inline double BCN(){ return BCN_; };
inline int32_t notRouted(){ return notRouted_; };
int32_t numNode;
std::vector<nsaddr_t> clusters;
std::vector<double> CBCV; // __Could Be Cluster Vector
double BCN_; // __Biggest Condition Neighbor
int32_t notRouted_; // __number of nodes that have no cluster
// CurrentNode is a class
bool chFlag; // in CurrentNode
double ConditionNeighbor; // CurrentNode
numNode = 80;
notRouted_ = 0;
BCN_ = 0;
在更改CurrentNode
和neighbor
后添加对nullptr
的检查
喜欢:
CurrentNode = ((MobileNode*)Node::get_node_by_address(q));
if (CurrentNode == nullptr)
{
cout << "Real bad version 1..." << endl;
}
else
{
// Your normal code...
if(CurrentNode->ConditionNeighbor == BCN()){
printf("currentnode : %f\n", CurrentNode->ConditionNeighbor);
tcl.evalf("$ns_ at %f \"$node_(%d) color red\"",NOW,CurrentNode->nodeid());
tcl.evalf("$ns_ at %f \"$node_(%d) label \\\"CH\\\"\"",NOW,CurrentNode->nodeid());
break;
}
}
然后你可能会发现错误是对 nullptr 的取消引用。
请记住,无论何时更改指针,都要添加类似的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.