我将代码最小化为:

最小,完整和可验证的示例:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

class Process{
    public:
        struct task_struct{
            int data;

            struct task_struct* next;
            struct task_struct* prev;
        };

        struct task_struct* head;

        struct task_struct* GetNewTask(int x){
            struct task_struct* newTask = (struct task_struct*)new(struct task_struct);
            newTask->data = x;

            newTask->prev = 0;
            newTask->next = 0;
            return newTask;
        }

        void InsertAtHead(int x){
            struct task_struct* newTask = GetNewTask(x);
            if(head == 0){
                head = newTask;
                return;
            }
            head->prev = newTask;
            newTask->next = head;
            head = newTask;
        }
};

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    Process pro;
    pro.InsertAtHead(1);
}

MainWindow::~MainWindow()
{
    delete ui;
}


我发现pro.InsertAtHead()调用会导致程序崩溃。但是没有错误消息。在Process类中,我尝试实现双重链接列表。我想是有问题的。

最佳答案

您需要向Process类添加构造函数,以将head初始化为null。

否则,您将写入一个未定义的位置。

关于c++ - pro.InsertAtHead()调用导致程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51709860/

10-10 13:20