2011-12-20 5 views
1

私はstdoutにzlib圧縮された文字列を出力しようとしていて、本当に奇妙なことが起こります。stdoutサイレントエラー

何も出力されないいずれの場合も
fwrite((void*)output, 1, numbytes, stdout); 

OR

for(int i=0; i != numbytes; ++i) 
    cout.put(output[c]); 
if(!cout.good()) 
    throw error(); 

:(すべての正しい戻り値をチェック)に成功したzlibのdeflate操作を実行した後、私は出力にこれらのいずれかの方法でフォーマットされていない結果を試してみてくださいstdoutが壊れています。 iostreamコードの場合、cout.good()はtrueを返し、failbitsは設定されません! fwriteを使うと、ferrorとthats fineをチェックします。 stdoutが壊れているとは、残りのアプリケーションセッションでは何も出力されないということです。私は無駄にそれぞれのインターフェイスでstdoutエラー状態をリセットしようとしました。

私はこれがライブラリエラーであると強く思っています。このようなことは静かに誤動作しないようにしてください。

すべてこれは、XCode 4.2を実行しているOSX 10.6で発生しています。

+3

エラーをチェックする前にフラッシュを試みましたか? 'fflush(stdout)'または 'cout.flush()' – ibid

+1

fwriteの戻り値を調べて、書き込まれたバイト数を確認しましたか?私はそれがアプリケーションの残りの部分を出力していないstdoutのために問題だとは思わないが、チェックの価値がある。 – Corbin

+0

あなたのC++コードでは、あなたはoutput [c]を呼び出していますが、cはコードに定義されていません。それはアウトプット[i]になっていますか? – DRH

答えて

0

これはおそらくXCodeまたはGDBの問題です。コンソールまたはWindowsで実行中のエラーを再現できません。