用指针清理队列时,无尽的环路

Endlessloop while clearing queue with pointers

本文关键字:无尽 环路 队列 指针      更新时间:2023-10-16

我有一个结构LastTimeon,其下一个指向相同结构的指针。我不想介绍后指针。我正在努力清理这种结构,您能帮我吗?可以在泵上进行多次打开,然后结构像pump1-> lasttimeon-> next-> next-> Next一样生长。该程序以无尽的循环REM2REM3REM4REM2REM3REM4等运行:

class Pump {
public:
    LastTimeOn *lastTimeOn;
    Pump();
};
class LastTimeOn{
public:
    unsigned int dayOfWeek;
    unsigned int hour;
    unsigned int minute;
    LastTimeOn(unsigned int minute1, unsigned int hour1, unsigned int dayOfWeek1);
    LastTimeOn *next;
};
void clearLastTimeOn(Pump *pump1) {
    Serial.print("REM1");
    while (pump1->lastTimeOn != NULL) {
        LastTimeOn *lastTimeOn = pump1->lastTimeOn;
        Serial.print("REM2");
        while (lastTimeOn->next != NULL) {
            Serial.print("REM3");
            lastTimeOn = lastTimeOn->next;
        }
        Serial.print("REM4");
        delete lastTimeOn;
        if (pump1->lastTimeOn->next == NULL){
            Serial.print("REM4a");
            delete pump1->lastTimeOn;
            pump1->lastTimeOn = NULL;
        }
    }
    Serial.print("REM5");
}

我创建这样的新数据:

lastTimeOn->next = new LastTimeOn(minute, hour, dayOfWeek);

只是一个快速的想法,我得到了...您将泵1-> lasttimeon传递给此:

void clearLastTimeOn(LastTimeOn* lastTimeOn)
{
    while (lastTimeOn != nullptr)
    {
        LastTimeOn* current = lastTimeOn;
        lastTimeOn = lastTimeOn->next;
        delete current;
    }
}

之后,您将pump1-> lastTimeon设置为nullptr。

class LastTimeOn{
public:
    unsigned int dayOfWeek;
    unsigned int hour;
    unsigned int minute;
    LastTimeOn(unsigned int minute1, unsigned int hour1, unsigned int dayOfWeek1);
    LastTimeOn();
    LastTimeOn *next;
    ~LastTimeOn() { delete this->next; }
};
void clearLastTimeOn(Pump *pump1) {
    if (pump1)
       delete pump1->lastTimeOn;
}