QT执行过程中出现程序异常结束

用QT中的定时器根据单链表来向表格中动态输入信息,但是执行几次之后总是出现程序异常崩溃,请各位大佬们看看是什么原因呢?孩子改了好几天了都不知道问题在哪

主要代码:

//这个函数是创建单链表的
InfoPackage *createinfo()
{
int i=0;
//三个队列分别表示等待大中小三种餐桌的人群
CustomerList *cusQueBigWait=new CustomerList();
CustomerList *cusQueMidWait=new CustomerList();
CustomerList *cusQueSmaWait=new CustomerList();
//三个链表分别表示大中小三种空余的餐桌
TableList *tabFreeBig=new TableList();
TableList *tabFreeMid=new TableList();
TableList *tabFreeSma=new TableList();
//三个链表分别表示大中小三种正在使用的的餐桌
TableList *tabUseBig=new TableList();
TableList *tabUseMid=new TableList();
TableList *tabUseSma=new TableList();

//增加大型空座,当无顾客时为”00“
Table7* tbf1=new Table7(1,"A01","00");
Table7* tbf2=new Table7(1,"A02","00");
Table7* tbf3=new Table7(1,"A03","00");
Table7* tbf4=new Table7(1,"A04","00");
Table7* tbf5=new Table7(1,"A05","00");
Table7* tbf6=new Table7(1,"A06","00");
TableNode *tnbf1=new TableNode(tbf1);
TableNode *tnbf2=new TableNode(tbf2);
TableNode *tnbf3=new TableNode(tbf3);
TableNode *tnbf4=new TableNode(tbf4);
TableNode *tnbf5=new TableNode(tbf5);
TableNode *tnbf6=new TableNode(tbf6);
tabFreeBig->addTheEnd(tnbf1);
tabFreeBig->addTheEnd(tnbf2);
tabFreeBig->addTheEnd(tnbf3);
tabFreeBig->addTheEnd(tnbf4);
tabFreeBig->addTheEnd(tnbf5);
tabFreeBig->addTheEnd(tnbf6);

//增加中型空座
Table7* tbf7=new Table7(2,"B01","00");
Table7* tbf8=new Table7(2,"B02","00");
Table7* tbf9=new Table7(2,"B03","00");
Table7* tbf10=new Table7(2,"B04","00");
Table7* tbf11=new Table7(2,"B05","00");
Table7* tbf12=new Table7(2,"B06","00");
TableNode *tnbf7=new TableNode(tbf7);
TableNode *tnbf8=new TableNode(tbf8);
TableNode *tnbf9=new TableNode(tbf9);
TableNode *tnbf10=new TableNode(tbf10);
TableNode *tnbf11=new TableNode(tbf11);
TableNode *tnbf12=new TableNode(tbf12);
tabFreeMid->addTheEnd(tnbf7);
tabFreeMid->addTheEnd(tnbf8);
tabFreeMid->addTheEnd(tnbf9);
tabFreeMid->addTheEnd(tnbf10);
tabFreeMid->addTheEnd(tnbf11);
tabFreeMid->addTheEnd(tnbf12);

//增加小型空座
Table7* tbf13=new Table7(3,"C01","00");
Table7* tbf14=new Table7(3,"C02","00");
Table7* tbf15=new Table7(3,"C03","00");
Table7* tbf16=new Table7(3,"C04","00");
Table7* tbf17=new Table7(3,"C05","00");
Table7* tbf18=new Table7(3,"C06","00");
TableNode *tnbf13=new TableNode(tbf13);
TableNode *tnbf14=new TableNode(tbf14);
TableNode *tnbf15=new TableNode(tbf15);
TableNode *tnbf16=new TableNode(tbf16);
TableNode *tnbf17=new TableNode(tbf17);
TableNode *tnbf18=new TableNode(tbf18);
tabFreeSma->addTheEnd(tnbf13);
tabFreeSma->addTheEnd(tnbf14);
tabFreeSma->addTheEnd(tnbf15);
tabFreeSma->addTheEnd(tnbf16);
tabFreeSma->addTheEnd(tnbf17);
tabFreeSma->addTheEnd(tnbf18);
InfoPackage *info=new InfoPackage(cusQueBigWait,cusQueMidWait,cusQueSmaWait,
                                  tabFreeBig,tabFreeMid,tabFreeSma,
                                 tabUseBig,tabUseMid,tabUseSma,i );
return info;

}

//这个是构造函数
Info::Info(QWidget *parent) :
QWidget(parent),
ui(new Ui::Info)
{
ui->setupUi(this);
id1=startTimer(5000);
info=createinfo();
ui->tableWidget->setColumnCount(5);
ui->tableWidget->setHorizontalHeaderLabels(QStringList()<<"就餐人数"<<"序号"<<"是否排队"<<"桌子号"<<"当前排队人数");
ui->tableWidget->setRowCount(20);
}

void Info::timerEvent(QTimerEvent *event)
{
if(event->timerId()==id1)
{

        people_num=qrand()%10+1;
        static int j=0;
        static int m=1if(people_num<=4)
        {
           type=3;
        }
        if(5<=people_num&&people_num<8)
        {
           type=2;
        }
        if(8<=people_num&&people_num<=10)
        {
           type=1;
        }
        TableList *left=NULL;
        TableList* use=NULL;
            if (type == 1)
            {
               left = info->tabFreeBig;
               use = info->tabUseBig;
               //cus = info->cusQueBigWait;
            }
            if (type == 2)
            {
               left = info->tabFreeMid;
               use = info->tabUseMid;
               //cus = info->cusQueMidWait;
            }
            if (type == 3)
            {
               left = info->tabFreeSma;
               use = info->tabUseSma;
               //cus = info->cusQueSmaWait;
            }

//问题主要在这里,每次这里执行两次就直接程序异常结束了
if(left->count()>0)
{
//TableNode *p=left->head->next;
TableNode *tn =new TableNode(left->head->next->table7);
QString s=tn->table7->ID;
qDebug()<<s;
ui->tableWidget->setItem(j,0,new QTableWidgetItem(QString::number(people_num)));
ui->tableWidget->setItem(j,1,new QTableWidgetItem(QString::number(m)));
ui->tableWidget->setItem(j,2,new QTableWidgetItem("否"));
ui->tableWidget->setItem(j,3,new QTableWidgetItem(s));
ui->tableWidget->setItem(j,4,new QTableWidgetItem(QString::number(0)));
//left->deleteNode(s);
//use->addTheEnd(tn);
if(type==1)
{
info->tabFreeBig->deleteNode(s);
info->tabUseBig->addTheEnd(tn);
}
else if (type == 2)
{
info->tabFreeMid->deleteNode(s);
info->tabUseMid->addTheEnd(tn);
}
else if (type == 3)
{
info->tabFreeSma->deleteNode(s);
info->tabUseSma->addTheEnd(tn);
}

       }
       else if(left->count()==0)
        {
            CustomerList *cus=NULL;
            //如果空余桌子的链表为空的时候则表示桌子已被占满,需要排队
            //在顾客排队的链表中添加新的结点
            CusNode *cn=new CusNode(QString::number(m));
            if(type==1)
            {
                cus=info->cusQueBigWait;
                info->cusQueBigWait->addEnd(cn);
            }
            if(type==2)
            {
                cus=info->cusQueMidWait;
                info->cusQueMidWait->addEnd(cn);
            }
            if(type==3)
            {
                cus=info->cusQueSmaWait;
                info->cusQueSmaWait->addEnd(cn);
            }
            //n++;
            int number=cus->cusNo(QString::number(m));
            ui->tableWidget->setItem(j,0,new QTableWidgetItem(QString::number(people_num)));  //就餐人数
            ui->tableWidget->setItem(j,1,new QTableWidgetItem(QString::number(m)));  //顾客的序号
            ui->tableWidget->setItem(j,2,new QTableWidgetItem("是"));
            ui->tableWidget->setItem(j,3,new QTableWidgetItem("  "));//桌子号,排队的时候没有
            ui->tableWidget->setItem(j,4,new QTableWidgetItem(QString::number(number)));  //当前排队的人数
       }
       j++;
       m++;


   }

}

img

希望各位大佬给孩子看看