Qt5 throws std::bad_alloc
Qt5 throws std::bad_alloc
我正在尝试在我的控制台应用程序中使用 QCustomPplot。我首先为它创建了一个适合我用途的简单包装器。包装器应该 但是,每次尝试显示窗口时,我都会收到 std::bad_alloc 错误。
这是我的代码,我在Plot.hpp
中创建了一个包装类:
class Plot
{
private:
std::string name;
QApplication* app;
QMainWindow* window;
QCustomPlot* plotWidget;
public:
Plot(std::string& name);
// OTHER METHODS
void showPlot();
};
在我的Plot.cpp
文件中,我有以下内容:
Plot::Plot(std::string& name) : name(name)
{
char *gui_argv[] = {(char*)(name.c_str()), NULL};
int gui_argc = sizeof(gui_argv) / sizeof(char*) - 1;
app = new QApplication(gui_argc, gui_argv);
window = new QMainWindow();
// Add plot Widget
plotWidget = new QCustomPlot(window);
window->setCentralWidget(plotWidget);
plotWidget->plotLayout()->clear();
}
// OTHER METHODS
void Plot::showPlot()
{
// Run the GUI
window->show();
app->exec();
}
我的main.cpp
中有以下内容:
int main()
{
std::string title = "Testing";
Util::Plot *plotWindow = new Util::Plot(title);
// NO OTHER STATEMENTS
plotWindow->showPlot();
return 0;
}
通过 GDB,我得到了这个堆栈跟踪,但我无法真正破译它以找到错误是什么。它深入到QT的内部
:#0 0x00007ffff7279e97 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1 0x00007ffff727b801 in __GI_abort () at abort.c:79
#2 0x00007ffff78d08fb in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3 0x00007ffff78d6d3a in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007ffff78d6d95 in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x00007ffff78d6fe8 in () at /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007ffff529e402 in () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#7 0x00007ffff530a22a in QListData::detach(int) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8 0x00007ffff534475e in () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#9 0x00007ffff549a48f in QCoreApplication::arguments() () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#10 0x00007fffef9e3791 in () at /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#11 0x00007fffef9e3c8d in QXcbIntegration::wmClass() const () at /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#12 0x00007fffef9f8e03 in QXcbWindow::create() () at /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#13 0x00007fffef9e4bfb in QXcbIntegration::createPlatformWindow(QWindow*) const () at /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#14 0x00007ffff5a6229e in QWindowPrivate::create(bool, unsigned long long) () at /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#15 0x00007ffff6245add in QWidgetPrivate::create_sys(unsigned long long, bool, bool) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#16 0x00007ffff624619d in QWidget::create(unsigned long long, bool, bool) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#17 0x00007ffff6252a96 in QWidget::setVisible(bool) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
# The following is line window->show()
#18 0x00007ffff7bd3179 in Util::Plot::showPlot() (this=0x55555576fd80) at ./lib/util/Plot.cpp:71
#19 0x00005555555549b3 in main() () at ./lib/test/PlotTest.cpp:16
我还验证了指向window
、app
和plotWidget
的指针不为空。所以基本上,只是创建QMainWindow
并尝试显示它而不执行任何其他操作会导致此失败发生。 这里可能出了什么问题?我错过了什么?
额外:我不认为以下是问题的原因。但以防万一: 我没有使用 QT Studio,我编写了自己的生成文件来构建libQCustomPlot.so
和我自己的应用程序,并将它们链接到必要的 QT 库。通过编译没有失败或警告。
编辑1:我忘了发布原始错误!它只是以下内容,没有其他信息/说明:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)
QApplication 通过引用获取argc
,并期望此引用在应用程序的生存期内有效。一旦你的绘图函数结束,QApplication就会留下一个悬而未决的gui_argc
引用,所以当调用QApplication::arguments(如你的回溯所示(时,会发生未定义的行为。您可以通过在某处持久化argc
来解决此问题。
相关文章:
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 组件对象模型 (COM):IMalloc::Alloc 在哪里分配内存?
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 为什么 GetSystemMetrics (SM_CXVIRTUALSCREEN) 返回'bad'值?
- 将 lambda 传递给 STL 集时出错"bad function call"
- 新的 C++14 位分隔符处"Bad Character" Eclipse Oxygen 错误
- 使用 #define 被认为是"bad practice"吗?
- "400 Bad request"使用 OpenSSL BIO 进行请求时
- CGAL:Hausdorff距离不良Alloc
- 解密文件AES_256_CBC返回"bad decrypt"错误
- 在C++流中,eof(),fail(),bad()和good()有什么区别
- C STD ::初始化类对象中的Alloc错误错误
- make / gcc:"bad build"的可能原因是什么?
- 什么是地址0xbaddc0dedeadbead "Bad decode dead bead"
- 在多线程环境中,什么可能导致"bad file descriptor"?
- 尝试解决HackerBank上的BFS挑战时出现错误的alloc异常
- "std::vector"在调整大小时引发"bad allocation"异常
- 尝试使用 execp、dup2 和管道实现 shell,挂起或"bad file descriptor"