質問

できるところにある、失業が生まれるのでしょうか。3つの主張は、一が作動します。

int nr = perform_calc();
assert( nr == 0);
assert( nr > 0);
assert( nr < 0);

である場合そのプログラムにはきちんと活性化の主張にg++3.4.4.

ないないから変更となる可能性のコードを印刷するには、数行の場合の主張んが作動します。

そのアイデア?

編集:読みに複数のコメントを余儀なくされたが編集できるようになります。ショーのコードについて教えてください。なぜこの愚かなこんなことをしたのだろう。するとは思えない!はどこですか?からの私の質問はずで明らかいポスト/変更のコードですることで、複数の理由

  • 私語は恥ずかしのコード(無犯罪が確な回答は、質問する場合をやった後で)
  • また、話を聞いてみて友達が少ないと情報なければならないなかった英文ができないのはなぜでチェックの返却はできないのはなぜでなただけの追加、ブレークポイント).
  • 皆様にお伝えしたくて書き込み私のコードをemacsでなくコンパイラで送信するリモートサーバーを編集するので、すで返却に失敗した主張れば何かが間違っています。

ばれん作りクエストに挑戦し、知識を競やhoaxが望ましい投票のためのスレッドです。この美しみです。が追加不要のコメントこのようにみてみたいと思ったわけ、"態度"の旗ることが可能になります。

皆様、本当にありがとうござい他者のコメントや答えを実際について説明してくれました。答する私の質問です。

役に立ちましたか?

解決

perform_calc()は、スタック内のリターンアドレスを上書きするバッファオーバーランを持っている場合は、

私は私の人生の中でとても醜いものを見てきたように、それは説明することができました。関数が終了すると、上書きされたアドレスは明らかにアサーション・コールを過ぎて、多分プログラムの別の領域にジャンプにつながる、スタックから回収され、現在PCに設定されています。

これは非常にリモートの可能性があるので、それはあなたが表示されているものだが。

別の可能性は、誰かが醜いマクロトリックをしたということです。あなたが

のようなものを持っているかどうかを確認
#define assert 

またはいくつかの同僚は、あなたがトイレにいた間、

ヘッダにこのような何かを置きます
#define < ==
#define > ==

別の回答で示唆したように、実際にコンパイルされてどのようなコードを参照するためにはgcc -Eに確認します。

他のヒント

マクロassertが定義されている場合、

NDEBUGはオフです。この翻訳単位をコンパイルするときに#undef NDEBUGていることを確認します。

あなたがアサート文がコードに残っていることを確認するために-Eスイッチでのgccを呼び出すことができます。

このコードは、最初の場所で正確であるようにそれは見えません。デバッグがオン(DEBUGおよび/または_DEBUGが設定され、NDEBUGが設定されていない)場合:

assert( nr == 0);

上記の行は、出口()NR場合を呼び出す= 0のため、この行が合格した場合、第二のアサートが実行される:!

assert( nr > 0);

...そしてコール出口()ので、NR == 0と!(NR> 0)。

assert( nr < 0);

そして、この3行目はまったく実行されません。

、正確には、このコードのポイントは何ですか?そして、なぜ、これらを追加することができ主張するならば、あなたの代わりに(printf関数を追加することができませんでした)?

このコードは、マルチスレッド化されていますか?たぶん、あなたは競合状態を持っています。

  

そして、いや、私はへの可能性を持っていけません   印刷するためにコードを変更   数アウト..

奇妙な。彼らはあなたが触れることができなかった実際のコードで実際にあった場合、コードはおそらく動作しませんでしたので、あなたは明らかに、アサート()文を挿入する機能を持っています。なぜあなたはテスト()呼び出し値にアサートを印刷することはできません?

私は、コードの断片を消毒しながら、あなたが誤って問題を解消しました疑い。より多くのコード(及びNRがアサートの間で変化しつつある)、または、それが実際にそのようには見えません(または、rlbondごとに、あなたはアサートがオンになっていない)のいずれかがあります。

以下消毒コードセグメントを投稿してみて、私たちはそれをうまくできない場合を見てみましょう。

これはのNaN のだろうか?その場合には、以下のアサートが失敗します:

assert( nr == nr );
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top