如何循环链接列表以减少值?

时间:2013-06-09 19:20:16

标签: c++ class function linked-list singly-linked-list

我有一个名为SensorNode的类,其中包含传感器对象的链接列表(以及其他内容)。该节点具有用于其剩余电池电量的数据成员,并且每个传感器具有用于获取多少电力的数据成员。我有一个名为processTimeClick的函数,该函数应该遍历节点中的整个传感器链表,并从节点剩余的电池中减去它们使用的电量。不幸的是,我收到了错误,错误的访问代码"而且我不知道为什么。这是我的功能,我希望有人能看出我的逻辑错误。

void SensorNode::processTimeClick() {
    if (batt == 0) {

    }
    else {
        temp = mySensors;
        do {
            if (batt <=0) {
                cout << "\nThis node has run out of battery\n";
                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都是#34; SensorBlock&#34;类型的指针(在SensorNode类中声明)。 (这是链表对象)。 batt是SnesorNode类中的float数据成员。

这里是SensorBlock类的声明:

class SensorBlock {

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

    }

这样,在尝试使用temp之前,会检查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;

等同于

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:

如果你把时间放在顶部,那就相当于:

{{1}}