0

私が取り組んでいるいくつかのコードで問題が発生しました。このコードは Linux ベースのシステムで実行されており、受け取ったエラーは次のとおりです。アサーション 'pcBasebandOutput' が失敗しました。

このコードをステップ実行して、これが失敗する理由を突き止めようとしましたが、理解できないようです。残念ながら、ここで実際にコードを共有するにはファイルが多すぎます (pcBasebandOutput 割り当てをステップ実行するにはかなりの時間がかかります)。これは、実際に質問できるよりも複雑な問題であることを理解しています。私の主な質問は次のとおりです。

  1. 私の主張です(pcBasebandOutput); コード行が必要ですか?Visual Studio でこのコードを実行したとき、プログラムの結果が望ましいものだったので、私が質問しただけです。
  2. pcBasebandOutput 変数を評価しているときに、なぜ false と評価されるのでしょうか? これは、実際には pcBasebandOutput に値が割り当てられていないということですか? または、値が割り当てられている可能性がありますが、正しい型 (2 つの変数の構造体へのポインターで、どちらも double) ではありませんか?

ありがとう!

4

2 に答える 2

1

assert論理条件をチェックします。条件が の場合、アサーションは失敗しますfalse。したがって、書き込みassert(cond)は論理的には書き込みと同じです。

if (!cond)
{
    assert(false);
}

コードから削除することはお勧めしませんassert。これは、何かが意図したとおりに進まなかったことを知らせるガードであるためです。後で足を撃たれる可能性があるため、それを無視するのは神の考えではありません

于 2012-07-16T14:21:28.537 に答える
1
  1. あなただけがそれを知ることができます

  2. pcBasebandOutput の型は何ですか? うまく初期化されていないのではないでしょうか?

assert の主な目的は、アサートがヒットした場所で IDE がデバッグ セッションに入ることができるようにすることです。そこから、すべての変数を読み取り、コールスタック/スレッドを確認できます。(デバッガーを使用する以外の) 他の解決策は、多くのログを追加することです。これは、スレッド化された環境では、それ自体で問題を引き起こす可能性があります (ログは非常に遅くなります)。

于 2012-07-16T14:22:51.713 に答える