2007年10月10日水曜日

istreamとmudflap

プログラムのデバッグをしようとしてmudflapを使ってみると, エラーメッセージが出るわ出るわでびっくり. 結構気を使って実装していたのになあと凹む.

それで, そのデバッグをしていたところ, 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 件のコメント: