繁体   English   中英

ostream&operator << segfaults without flush()

[英]ostream& operator<< segfaults without flush()

我有一个自定义类,我已经定义了一个自定义的转换operator char() ,称之为A 现在,假设我想要一个这个类的数组,但是增加了一些功能,所以我定义了一个新的类B ,用一个类型为std::vector<A>的成员变量array来实现。

我想要B处理的一件事就是将其数据打印到屏幕上,这样我就创建了一个friend函数

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()语句时会导致分段错误。 我宁愿没有刷新,因为应该由用户选择何时刷新流(我相信?)所以任何人都可以澄清为什么它没有崩溃?

谢谢!

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

return out;

作为运营商的最后一行。 请注意,也许是偶然的,调用out.flush()做了一些寄存器(比如EAX)来保存流的值,从而返回(根据标准调用约定),这就是调用者所期望的。 但是你必须确保最后一次return

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM