0

就像标题所暗示的那样,当我在调试模式下(而不是在发布模式下)运行我的程序时,wxString 构造函数总是抛出一个读取访问冲突异常。我猜它与编码有关,但我不知道如何解决它。当我将项目从 Visual Studio 移植到 CMake 时,出现了问题。

这个:

wxString str(std::string("Hello world!"));

抛出异常:

Exception 0xc0000005 encountered at address 0x7ffda0bd8670: Access violation reading location 0xffffffffffffffff

我研究了反汇编和 wxWidgets 抛出的

wxMBConv::cMB2WC(char const *,unsigned __int64,unsigned __int64 *)const :
  [...]
  callq  *(%rax)
  [...]

构建规格是:

CMake ver. 3.20.2 in Debug mode
MSVC ver. 16.0 with architecture amd64
LLDB ver. 9.0
wxWidgets ver. 3.1.5#2

所有文件都以 UTF-8 编码,我更喜欢使用带有窄字符串的 UTF-8

4

1 回答 1

1

我想我自己发现了问题。多亏了 vcpkg,CMake 将调试版本与 wxwidgets 的发布版本链接起来,这会导致问题。该问题已在此处报告: vcpkg issue 18066

但目前还没有修复

于 2021-10-03T22:06:29.423 回答