【问题标题】:QString throws bad_alloc ExceptionQString 抛出 bad_alloc 异常
【发布时间】:2015-06-07 18:46:05
【问题描述】:

我有一个问题。 我使用以下代码将 std::string 转换为 QString。

std::string testStdStr = "Hello";
QString test = QString::fromStdString(testStdStr);

此代码在 MSVC 2013 Prof 下引发 bad_alloc 异常,但仅限于调试模式!如果我在发布模式下编译,一切都会按预期工作。

一些附加信息:SUBSYSTEM 更改为 Windows 并且入口点设置为 mainCRTStartup

在QString对象初始化的时候抛出异常! 有什么建议么?如果您需要更多信息,请询问!

【问题讨论】:

  • 你使用的是什么 Qt 版本?
  • 感谢您的回答! 5.4 msvc 32 位
  • 我添加了一些信息
  • 你试过调试器了吗?在我看来,this 构造函数中对 d = Data::allocate(size + 1); 的调用失败了,而 Q_CHECK_PTR(d); 因此导致异常。我想知道在这种情况下实际的 size 值是多少。我想您需要检查 QArrayData::allocate 在您的情况下返回 0 的位置以及原因。
  • 另外有趣的是您的程序中发生的其他分配。也许真的没有内存了,而更多的信息在调试模式下编译可执行文件时存储在ram中。

标签: qt visual-c++ bad-alloc


【解决方案1】:

当您混合调试库和发布库时会发生这种情况,请检查您链接的所有库是否处于调试版本(qt5cored.lib [不是 qt5core.lib]、qtmaind.lib 等...)

【讨论】:

  • 是的。例如,我遇到了这个问题,因为我链接了 QT (qt5core.dll) 的发布库和调试运行时库(在 MS VisualStudio 中设置了编译器选项“/MDd”而不是“/MD”)。
猜你喜欢
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 2013-05-24
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
相关资源
最近更新 更多