如何循环浏览链表以减少值



我有一个名为SensorNode的类,它包含(除其他外(传感器对象的链表。 节点有一个数据成员,用于表示剩余的电池电量,每个传感器都有一个数据成员,用于表示它们消耗的电量。 我有一个名为processTimeClick的函数,它应该遍历节点中传感器的整个链表,并从节点剩余的电池中减去它们使用的电量。 不幸的是,我收到"错误,错误的访问代码",我不知道为什么。 这是我的功能,我希望有人能看到我的逻辑错误在哪里。

void SensorNode::processTimeClick() {
    if (batt == 0) {
    }
    else {
        temp = mySensors;
        do {
            if (batt <=0) {
                cout << "nThis node has run out of batteryn";
                func = 0;
                break;
            }
            batt = (batt - (temp->SensEl->getPC()));
            temp = temp->LLelement;
        } while (temp->LLelement != NULL); //My code stops here and says "Thread   1:EXC_BAD_ACCESS (code=1, address=0x0)
        }
    }

为了便于理解:temp 和 mySensors 都是类型为"SensorBlock"(链表对象(的指针(在 SensorNode 类中声明(。batt 是 SnesorNode 类中的浮点数据成员。

下面是 SensorBlock 类的声明:

class SensorBlock {
    friend class SensorNode;
    SensorBlock * LLelement;
    sensor * SensEl;
    SensorBlock(sensor* senspoint);
};
SensorBlock::SensorBlock(sensor* senspoint) {
    SensEl = senspoint;
    LLelement = NULL;
}

感谢您的帮助!

我认为您希望您的循环看起来更像这样:

    while (temp) {
        if (batt <=0) {
            cout << "nThis node has run out of batteryn";
            func = 0;
            break;
        }
        batt = (batt - (temp->SensEl->getPC()));
        temp = temp->LLelement;
    }

这样,在尝试使用它之前,会检查temp以确保它不为 null。

如果你有一个这样的循环:

do {
  // use temp
  temp = temp->LLelement;
} while (temp->LLelement);

它相当于

beginning_of_loop:
  // use temp -- oops it might be null!
  temp = temp->LLelement;
  // temp might be null here
  if (temp->LLelement) goto beginning_of_loop;

如果你把 while 放在顶部,它相当于这个:

beginning_of_loop:
  if (!temp) goto end_of_loop:
  // use temp -- can't be null
  temp = temp->LLelement;
  // temp might be null here, but we aren't using it
  goto beginning_of_loop;
end_of_loop:

相关内容

  • 没有找到相关文章

最新更新