c++ int member changes on its own

0

I am new to c++. It looks like member variable _scheduleSize gets value kind of "integer_half_max" without any reason. Could someone please explain me why is this happening?

Invocation

   leds.addSchedulePoint(new ScheduledLedPoint(ScheduleTime(9), 0));

of method:

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

results in such console output :

_scheduleSize:0
_scheduleSize:1073680860
0

Exception (28):
epc1=0x40206514 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000010 depc=0x00000000

Below you can see entire class:

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());
  }
}
c++
class
member
asked on Stack Overflow Mar 27, 2018 by user4757547

2 Answers

1

ScheduledLedPoint *_schedule[]; is not valid C++ and shouldn't compile. Some compilers accept it as an extension - but even there, it's an array of zero size; _schedule[x] exhibits undefined behavior for any value of x.

When you write ScheduledLedPoint *_schedule[_size] in the constructor, that doesn't affect the data member named _schedule, as you seem to believe. Instead, it creates and immediately destroys a local variable that also happens to be named _schedule; this has exactly zero net effect.

For an array-like data structure of variable size, use std::vector.

answered on Stack Overflow Mar 27, 2018 by Igor Tandetnik
-1

because you have syntax error including this recursive function

answered on Stack Overflow Mar 28, 2018 by Mohamed Mostafa

User contributions licensed under CC BY-SA 3.0