在我正在编写的程序中,只有在开头有cout << endl语句的情况下,特定代码块才能正确工作。如果没有,程序不会分段错误,只是给出了一个完全不正确的答案100%。使用cout << endl语句,它每次都能工作。实际上,我不知道造成这种情况的原因,因为我尝试过使用cout.flush()刷新cout缓冲区,但是没有效果。此外,在没有endl的情况下使用cout是行不通的。我还进行了双重检查,Node结构的所有成员变量都已在结构的初始化程序列表中初始化。如果有人能帮我这个忙,我会非常感激的!下面是一段令人反感的代码:
` bool Board::CheckDistinct(Node* node, int* rec) {
cout << endl; // if I comment this line out, it doesn't work correctly
if(node->incoming.size() > 1) {
Node* rec_node = node->incoming[rand() % node->incoming.size()];
*rec = rec_node->row * num_cols() + rec_node->col;
return false;
}
else if(node->incoming.size() == 0) return true;
else {
node->visited = true;
if(!node->incoming[0]->visited) CheckDistinct(node->incoming[0], rec);
}
}下面是Node结构的代码(如果有帮助的话):
struct Node {
int val, row, col, dist;
bool visited, is_white_hole, is_black_hole;
Node* outgoing[4];
std::vector<Node*> incoming;
Node(int val_, int row_, int col_) :
val(val_), row(row_), col(col_), dist(-1),
visited(false),
is_white_hole(true), is_black_hole(true) { }
};发布于 2014-10-27 09:21:44
好了我终于找到了。返回语句中出现了错误:
if(!node->incoming[0]->visited) CheckDistinct(node->incoming[0], rec);
如果不是这样的话,我没有会返回的else语句,所以我猜此时发生了未定义的行为。我仍然不知道为什么cout << endl会解决这个问题,但我想这正是它的原因。
发布于 2014-10-27 09:04:16
我怀疑问题在于你没有返回你的内在结果:
if(!node->incoming[0]->visited) CheckDistinct(node->incoming[0], rec);应:
if(!node->incoming[0]->visited) return CheckDistinct(node->incoming[0], rec);
^^^^^^cout调用可能只是以某种方式简单地改变了代码生成(例如,编译器可能决定实际递归而不是将尾递归转换为循环,或者以某种方式使用不同的寄存器,或者其他事情的长列表。
(应该注意,我见过这个错误很多次了,我自己也犯过几次错误.这一点也不稀奇!)
https://stackoverflow.com/questions/26583524
复制相似问题