C INT成员自行更改

c++ int member changes on its own

本文关键字:INT 成员      更新时间:2023-10-16

我是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());
  }
}

ScheduledLedPoint *_schedule[];无效C ,不应编译。有些编译器将其视为扩展名 - 但即使在那里,它的大小为零。_schedule[x]对任何值的x表现出未定义的行为。

在构造函数中编写ScheduledLedPoint *_schedule[_size]时,您似乎相信,这不会影响名为_schedule的数据成员。取而代之的是,它创建并立即摧毁了一个局部变量,该变量也恰好被命名为_schedule;这完全具有零净效应。

对于可变大小的阵列的数据结构,请使用std::vector

,因为您有语法错误,包括此递归函数