首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加endl修复代码

添加endl修复代码
EN

Stack Overflow用户
提问于 2014-10-27 08:27:06
回答 2查看 129关注 0票数 1

在我正在编写的程序中,只有在开头有cout << endl语句的情况下,特定代码块才能正确工作。如果没有,程序不会分段错误,只是给出了一个完全不正确的答案100%。使用cout << endl语句,它每次都能工作。实际上,我不知道造成这种情况的原因,因为我尝试过使用cout.flush()刷新cout缓冲区,但是没有效果。此外,在没有endl的情况下使用cout是行不通的。我还进行了双重检查,Node结构的所有成员变量都已在结构的初始化程序列表中初始化。如果有人能帮我这个忙,我会非常感激的!下面是一段令人反感的代码:

代码语言:javascript
复制
`    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结构的代码(如果有帮助的话):

代码语言:javascript
复制
   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) { }
  };
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-27 09:21:44

好了我终于找到了。返回语句中出现了错误:

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

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

票数 0
EN

Stack Overflow用户

发布于 2014-10-27 09:04:16

我怀疑问题在于你没有返回你的内在结果:

代码语言:javascript
复制
    if(!node->incoming[0]->visited) CheckDistinct(node->incoming[0], rec);

应:

代码语言:javascript
复制
    if(!node->incoming[0]->visited) return CheckDistinct(node->incoming[0], rec);
                                    ^^^^^^

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

(应该注意,我见过这个错误很多次了,我自己也犯过几次错误.这一点也不稀奇!)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26583524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档