添加endl修复代码

时间:2014-10-27 08:27:07

标签: c++ endl

在我正在编写的程序中,如果我在开头有一个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) { }
  };

2 个答案:

答案 0 :(得分:3)

我怀疑问题是你没有回复你的内心结果:

    if(!node->incoming[0]->visited) CheckDistinct(node->incoming[0], rec);

应该是:

    if(!node->incoming[0]->visited) return CheckDistinct(node->incoming[0], rec);
                                    ^^^^^^

cout调用可能只是以某种方式改变代码生成(例如,编译器可能决定实际递归而不是将尾递归转换为循环,或者以某种方式使用不同的寄存器,或者一长串其他事情。

(应该注意的是,我已多次看到这个错误,并且自己做了几次......这一点并不罕见!)

答案 1 :(得分:0)

好的,我终于找到了。错误发生在return语句中:

if(!node->incoming[0]->visited) CheckDistinct(node->incoming[0], rec);

如果那不是真的话,我没有会返回的else语句,所以我猜这个时候发生了未定义的行为。我仍然不知道为什么cout << endl解决了这个问题,但我想这就是它的原因。