代码之家  ›  专栏  ›  技术社区  ›  mewais

Qt5抛出std::错误分配

  •  1
  • mewais  · 技术社区  · 6 年前

    这是我的代码,我在 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,我已经编写了自己的makefile来构建 libQCustomPlot.so 以及我自己的应用程序,并将它们链接到必要的QT库。编译过程中没有失败或警告。

    编辑1: 我忘了贴原来的错误!只是以下内容,没有其他信息/说明:

    terminate called after throwing an instance of 'std::bad_alloc'
      what():  std::bad_alloc
    Aborted (core dumped)
    
    1 回复  |  直到 6 年前
        1
  •  5
  •   diametralpitch    6 年前

    应用程序需要 argc gui_argc 因此,当调用QApplication::arguments(如您的回溯中所示)时,会发生未定义的行为。你可以通过制造 argc公司 在某个地方。