Всем привет! Сразу прошу не ругать, я новичок. Можете подсказать, в чём у меня "грабли"? Приведённый ниже код вылетает (либо печатает что-то совсем левое на второй строке в loop(). Код (Text): class B { public: virtual const char* getStr(); virtual int getInt(); B(const char*, int); private: const char* p_str; int m_int; }; B::B(const char* str, int i){ p_str=str; m_int=i; } const char* B::getStr() { return p_str; } int B::getInt(){ return m_int; } B* items[]={&B("test", 1)}; void setup(){ Serial.begin(9600); Serial.println("SETUP"); } void loop() { Serial.println("LOOP"); /// Здесь лажа ///////////////////// Serial.println(items[0]->getInt()); //////////////////////////////////// delay(100000); } Я понимаю, что что-то не так с указателями, но вот сижу целый вечер и не могу понять - что. Помогите, плиз.
Похоже, нашёл проблему. Экземпляр класса, который создаётся в строке Код (Text): B* items[]={&B("test", 1)}; имеет ограниченный scope, поэтому ссылка на него берётся, сохраняется в массиве, а сам объект уничтожается... В IDE 1.5.8 этот код вообще не компилируется.