【问题标题】:wxString(const std::string&) throws read access violation in debug buildwxString(const std::string&) 在调试构建中引发读取访问冲突
【发布时间】:2021-11-24 09:15:31
【问题描述】:

正如标题所暗示的那样,当我在调试模式下(不是在发布模式下)运行我的程序时,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

【问题讨论】:

  • 你是说 MSVC 没有发生吗?
  • 不,这与编码无关,要么存在一些微妙的构建不匹配(即您使用不同的编译器选项编译了库和编译器),要么是程序中其他地方的错误。为了区分这两种情况,请将上面的行添加到最小的 wxWidgets 示例(其源代码树中的samples/minimal)并检查您是否仍然可以在那里重现问题。

标签: c++ debugging wxwidgets wxstring


【解决方案1】:

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

但目前还没有修复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多