ostream&运算符<<没有flush()的段错误

发布于 2024-12-04 12:37:09 字数 647 浏览 0 评论 0 原文

我有一个自定义类,我为其定义了一个自定义铸造操作员char(),称其为 a 。现在,说我想要此类的数组,但是使用添加功能,因此我定义了一个新的类 b ,可以使用成员变量 array std: :vector&lt; a&gt; 。

我想要处理 b 的一件事是将其数据打印到屏幕上,因此

ostream& operator<<(ostream& out, const B& b)
{
   // invoking custom cast works fine here
   for(int i=0;i<array.size();++i) out.put((char)array[i]); 
   // without the following out.flush() we get segfault
   out.flush()
}

当我省略 out.flush()时,我出于某种原因 创建 friend 函数。 语句最后会导致分段故障。我宁愿在那里没有冲洗,因为它应该由用户选择何时冲洗流(我相信?),所以有人可以澄清为什么它没有它崩溃了吗?

谢谢!

I have a custom class for which I've defined a custom cast operator char(), call it A. Now, say I want an array of this class but with added functionality so I define a new class B to achieve this with a member variable array of type std::vector<A>.

One of the things I want B to handle is printing its data to screen so I create a friend function

ostream& operator<<(ostream& out, const B& b)
{
   // invoking custom cast works fine here
   for(int i=0;i<array.size();++i) out.put((char)array[i]); 
   // without the following out.flush() we get segfault
   out.flush()
}

For some reason when I omit the out.flush() statement at the end it causes a segmentation fault. I would rather not have the flush in there because it should be up to the user to choose when to flush the stream (I believe?) so can anybody please clarify why it crashed without it?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拥有 2024-12-11 12:37:09

你必须在那里归还一些东西。当然你已经提供了流,所以你应该:

return out;

作为操作符的最后一行。请注意,也许偶然,调用 out.flush() 会创建一些寄存器(例如 EAX)来保存流的值,从而被返回(根据标准调用约定),这就是来电者正在等待。 但是你必须添加最后一个返回

You have to return something there. Certainly the stream you've been provided, so you should:

return out;

as the last line of the operator. Note that, maybe by chance, calling out.flush() made some register (say EAX) to hold the value of the stream, thus being returned (as per standard calling convention), and this is what the caller was expecting. BUT you have to add that last return for sure.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文