簡體   English   中英

運行時錯誤:加載值127,這不是類型'bool'的有效值

[英]Runtime error: load of value 127, which is not a valid value for type 'bool'

我在Debian 8,x86_64上使用g ++ 4.9.2。 我正在捕獲Undefined Behavior sanitizer(UBsan)( - -fsanitize=undefined )錯誤:

algebra.cpp:206:8: runtime error: load of value 127,
    which is not a valid value for type 'bool'

代碼來自Crypto ++庫。 以下是algebra.cpp:206的代碼(以及一些相關代碼):

206   struct WindowSlider
207   {
208     WindowSlider(const Integer &expIn, bool fastNegate, unsigned int windowSizeIn=0)
209         : m_exp(expIn), m_windowModulus(Integer::One()), m_windowSize(windowSizeIn), m_windowBegin(0), m_fastNegate(fastNegate), m_firstTime(true), m_finished(false)
210     {
            ...
249         Integer m_exp, m_windowModulus;
250         unsigned int m_windowSize, m_windowBegin;
251         word32 m_expWindow;
252         bool m_fastNegate, m_negateNext, m_firstTime, m_finished;
253     };

它被稱為幾個地方,如:

$ grep -I WindowSlider *
...
algebra.cpp:    std::vector<WindowSlider> exponents;
algebra.cpp:        exponents.push_back(WindowSlider(*expBegin++, InversionIsFast(), 0));
ecp.cpp:    std::vector<WindowSlider> exponents;
ecp.cpp:        exponents.push_back(WindowSlider(*expBegin++, InversionIsFast(), 5));

InversionIsFast是一個bool ,所以這應該不是問題。 但我添加!!InversionIsFast()以防萬一,問題仍然存在。

編輯 :這是InversionIsFast的grep。 它似乎已初始化。

$ grep -I InversionIsFast *
algebra.cpp:        exponents.push_back(WindowSlider(*expBegin++, !!InversionIsFast(), 0));
algebra.h:  virtual bool InversionIsFast() const {return false;}
ec2n.h: bool InversionIsFast() const {return true;}
ecp.cpp:        exponents.push_back(WindowSlider(*expBegin++, !!InversionIsFast(), 5));
ecp.h:  bool InversionIsFast() const {return true;}

我還在ctor中初始化了m_negateNext

問題是什么,如何清除?

使用-fsanitize = undefined測試libc ++的博客文章也提到了類似的錯誤:

運行時錯誤:加載值64,這不是類型'bool'的有效值

表明它可能是由於未初始化的bool,最后的評論說:

我沒有(在課堂上)初步化bool [...]

從我可以告訴的是m_negateNext的情況,因為它沒有在WindowSlider的構造函數中初始化,而其余的成員變量是。

未初始化的bool將具有不確定的值,並且使用不確定的值是未定義的行為

暫無
暫無

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

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