c++ - 代码仅适用于 endl - 非常奇怪

标签 c++ endl

我之前遇到了一个奇怪的问题。我在 B 树中从事插入工作,并编写了一个简单的显示函数。我运行了它,即使我插入了一些值,它也没有在控制台中显示任何内容。

我进入了 Debug模式,我跟随程序的流程,调试器告诉我树中有值。然后我只想显示第一个节点的元素,我遇到了同样的问题:一个空的控制台。

我问我的老师会出现什么错误,他告诉我在 cout 之后放一个 endl,像这样:

cout << node->keys[i] << endl;

成功了! 然后他告诉我,我可能在我的程序中处理了一个 NULL 指针,而 Eclipse 对此没有说明任何事情,但没有说明 endl 如何提供帮助。

有人知道问题出在哪里以及 endl 是如何解决的吗?我非常非常困惑。 我不明白刷新缓冲区与我的显示功能有什么关系。

最佳答案

我回答有点晚了,其他答案已经解释了如何冲洗,所以我想至少回答你对 Johnsy 答案的评论。

首先,输出被缓冲的原因是将数据写入某个输出流而不是内存通常是一个非常慢的操作(这取决于您是想写入 ssd 或 hdd 上的文件还是只是写入显示,但它们都比 ram 慢得多)。

因此,c++ 首先将其写入内部缓冲区,只有在缓冲区已满或您刷新流时才实际写入输出。这样做是为了避免在大多数输出​​流上进行缓慢的写入操作。

那么现在为什么需要在显示之前刷新缓冲区... 就像已经说过的那样,它实际上只是将它写出来供您查看缓冲区何时已满或何时被显式刷新。现在,当程序正常结束时,所有流都会自动刷新,所以很可能会发生程序崩溃(崩溃不会刷新缓冲区),因此您的程序会退出而不会显示。

因为当您添加 endl 时您的程序会正确显示所有内容我猜你正在尝试输出一个带有 nullptr 的节点在最后并在从 main 返回之前崩溃.您可以通过添加 std::cout << "end of the program" << std::endl; 轻松测试它就在你的return之前在 main 中并测试它是否显示。

关于c++ - 代码仅适用于 endl - 非常奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15360122/

相关文章:

c++ - 通过摄像头进行人脸检测

c++ - 在运算符表达式上下文中纠正重载解析的内置运算符候选的行为

c++ - std::endl 和 '\n' 有什么区别

c++ - 比较 std::endl 的地址

C++ 结构对齐到 1 字节导致 WinCE 崩溃

c++ - 在基类中调用的 VIrtual 基函数,C++

c++ - A-Star 搜索算法找不到有效路径

c++ - 为什么我不能在条件运算符中计算出 endl?

c++ - 在 C++ 中尝试在每个运算符重载级联之后写一个换行符