簡體   English   中英

使用 boost regex lib 時 C++ 斷言崩潰

[英]C++ assertion crash when using boost regex lib

我剛剛在我的新筆記本電腦上安裝了boost lib 和visual studio

嘗試運行我的代碼時出現以下錯誤:

Assertion failed: r != 0, file libs\regex\build\..\src\w32_regex_traits.cpp, line 125

在 debug 32bit 中運行時會發生該錯誤,但在使用 release 而不是 debug 時有效。 這是我的片段:

#include <iostream>
#include <boost/regex.hpp>
int main()
{
     boost::regex("hello word", boost::regex::icase);
}

我嘗試重新安裝 VS2019 和boost lib,但問題仍然存在。

任何想法可能是錯誤的原因?

斷言在這里:

#ifndef BOOST_NO_ANSI_APIS
   int r = ::LCMapStringA(this->m_locale, LCMAP_LOWERCASE, char_map, 1 << CHAR_BIT, this->m_lower_map, 1 << CHAR_BIT);
   BOOST_ASSERT(r != 0);
#else

看起來LCMapStringA function失敗了。

如果不成功,這個 function 返回 0。 要獲取擴展錯誤信息,應用程序可以調用 GetLastError,它可以返回以下錯誤代碼之一:

  • ERROR_INSUFFICIENT_BUFFER 提供的緩沖區大小不夠大,或者它被錯誤地設置為 NULL。
  • ERROR_INVALID_FLAGS 為標志提供的值無效。
  • ERROR_INVALID_PARAMETER 任何參數值無效。

我不認為這些條件是可以忽略的。 它們可能會導致未定義的行為 因此,也許您可以在無法獲取更多信息時使用調試器獲取GetLastError的值。

取決於你失敗的類型

  • 修復您的系統配置(可能缺少語言環境支持?)
  • 修復您的輸入(也許您的輸入包含無效編碼)
  • 向 boost 開發人員報告錯誤(以防緩沖區大小問題不是記錄在案的限制)

將區域格式從英語(XXXX)區域更改為英語(美國)后問題已解決

暫無
暫無

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

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