我有一个名为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;
}
感谢您的帮助!
答案 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}}