【发布时间】:2018-03-27 12:33:40
【问题描述】:
我是 C++ 新手。
看起来成员变量_scheduleSize 毫无理由地获得了“integer_half_max”的值。有人可以解释一下为什么会这样吗?
调用
leds.addSchedulePoint(new ScheduledLedPoint(ScheduleTime(9), 0));
方法:
void ScheduledLeds::addSchedulePoint(ScheduledLedPoint *schedulePoint) {
Serial.print("_scheduleSize:");
Serial.println(_scheduleSize);
_schedule[_scheduleSize++] = schedulePoint;
Serial.print("_scheduleSize:");
Serial.println(_scheduleSize);
for (size_t i = 0; i < _scheduleSize; i++) {
Serial.println(_schedule[i]->getLevel());
}
}
导致这样的控制台输出:
_scheduleSize:0
_scheduleSize:1073680860
0
Exception (28):
epc1=0x40206514 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000010 depc=0x00000000
您可以在下面看到整个班级:
class ScheduledLeds {
public:
ScheduledLeds(int pin);
void addSchedulePoint(ScheduledLedPoint *schedulePoint);
void process(ScheduleTime currentTime);
void freezeLedLevel(int targetLevel, int minutes);
int _pin;
private:
ScheduledLedPoint *_schedule[];
int _scheduleSize;
int _count;
int _size;
long _unfreezeTime;
int _lastLevel;
ScheduleTime _lastTime;
void setTransitionalLightLevel(ScheduleTime now, ScheduledLedPoint nextPoint);
void setLightLevel(int targetLevel);
};
ScheduledLeds::ScheduledLeds(int pin) {
pinMode(pin, OUTPUT);
_pin = pin;
_scheduleSize = 0;
_size = 10;
_unfreezeTime = millis();
ScheduledLedPoint *_schedule[_size];
}
void ScheduledLeds::addSchedulePoint(ScheduledLedPoint *schedulePoint) {
Serial.print("_scheduleSize:");
Serial.println(_scheduleSize);
_schedule[_scheduleSize++] = schedulePoint;
Serial.print("_scheduleSize:");
Serial.println(_scheduleSize);
for (size_t i = 0; i < _scheduleSize; i++) {
Serial.println(_schedule[i]->getLevel());
}
}
【问题讨论】:
-
欢迎。当发布关于为什么某些东西不起作用的问题时,您应该始终包含minimal reproducible example - 生成此问题的过程通常会帮助您自己解决问题,但如果没有,欢迎您在此处发布。
-
你应该避免
new,改用智能指针。 -
ScheduledLedPoint *_schedule[_size];是一个局部变量。使用std::vector。 -
此代码适用于 arduino,因此 std::vector 不是这里的情况。