我将代码最小化为:
最小,完整和可验证的示例:
#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类中,我尝试实现双重链接列表。我想是有问题的。
答案 0 :(得分:1)
您需要向Process类添加一个构造函数,以将head初始化为null。
否则,您将写到未定义的位置。