pro.InsertAtHead()调用导致程序崩溃

时间:2018-08-06 14:23:57

标签: c++

我将代码最小化为:

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

#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类中,我尝试实现双重链接列表。我想是有问题的。

1 个答案:

答案 0 :(得分:1)

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

否则,您将写到未定义的位置。