それで, そのデバッグをしていたところ, mudflapのエラーメッセージの原因がistreamにあるらしいことが分かった. 以下にエラーメッセージが出る最小のコードを載せる. ポイントは is.eof() を operator>> の中で読んでいることらしい. これを除くとメッセージは消える.
# is.fail()を呼んでもエラーが起きる.
さあ, 原因は分かったので対策はどうするか考えないといけないが, 明日の発表資料が未完なので, そっちに移る.
問題のコード
#include<iostream>
using namespace std;
class A{};
istream& operator>>(istream& is, A& a)
{ is.eof(); return is; }
int main(void){
A a;
cin >> a;
return 0;
}
mudflapのエラーメッセージ (g++4.2 on FreeBSD 6-stable)
mudflap violation 1 (check/read): time=1191946554.020591 ptr=0x2821c0a0 size=4
pc=0x28085c12 location=`c.cpp:7 (operator>>)'
[0x0x28083a7a]
number of nearby objects: 0
0 件のコメント:
コメントを投稿