簡體   English   中英

斷言在C ++問題中失敗

[英]Assertion Failed in C++ questions

遇到一些我正在研究的代碼問題。 此代碼在基於Linux的系統上運行,我收到的錯誤如下:/root/cvswork/pci_sync_card/Code/SSBSupport/src/CRCWbHfChannel/CRCWbHfMSBSimulator.cpp:447:virtual void CCRCWbHfMSBSimulator :: Process():斷言'pcBasebandOutput'失敗。

我試過踩過這段代碼來弄清楚為什么會失敗,我似乎無法弄明白。 不幸的是我有太多的文件可以在這里真正共享代碼(單步執行pcBasebandOutput分配需要相當長的時間)。 我知道這是一個比實際問題更復雜的問題。 我的主要問題是:

  1. 是我的斷言(pcBasebandOutput); 必要的代碼行? 我只是問,因為在Visual Studio上運行此代碼時,我的程序的結果是可取的。
  2. 在評估我的pcBasebandOutput變量時,為什么會將其評估為false? 這是說沒有實際分配給pcBasebandOutput的值嗎? 或者可以為其賦值,但它不是正確的類型(指向兩個變量結構的指針,兩者都是雙精度數)?

謝謝!

assert檢查邏輯條件。 如果條件為false則斷言失敗。 因此編寫assert(cond)在邏輯上與寫入相同:

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

我不建議你從代碼中刪除assert ,因為它是一個警衛告訴你某些東西不符合它的意圖。 並且忽略這一點並不是一個上帝的想法,因為它可能會在以后拍攝你的腿

  1. 只有你能知道

  2. pcBasebandOutput的類型是什么? 也許它沒有正確初始化?

斷言的主要目的是允許IDE在assert命中的地方進入debuging會話。 從那里你可以讀取所有變量並查看callstack / threads。 其他解決方案(比使用調試器)是添加大量日志記錄,這在線程環境中可能會導致問題(日志記錄非常慢)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM