Доброго времени суток! Комрады, направьте на путь истинный, как правильно описать динамический массив. Я сделал так: Есть структура Код (C++): struct TRule { byte SceneID; byte ElseSceneID; }; Задаю массив Код (C++): TRule* Rule[MAX_RULES]; Когда необходимо создаю элемент в массиве Код (C++): Rule[RuleID] = new TRule; Rule[RuleID]->SceneID = 5; Rule[RuleID]->ElseSceneID = 6; Когда элемент больше не нужен убиваю его Код (C++): delete Rule[Index]; Вроде все законно, но есть проблема, после 2-3 итерации одного и того же элемента массива в пямять на его место записываются другие данные и МК виснет. Выяснил это опытным путем, выводя в монитор при создании элемента массива Rule[RuleID]->SceneID. В какой-то момент он перестает быть нулем и я получаю то, что получаю. Вопрос собственно один, правильно ли я создаю динамический массив? Делал сам по аналогии с теми примерами, что нашел в инете, но там речь шла про отдельные элементы, а не про массив. (http://mypractic.ru/urok-15-ukazateli-v-c-dlya-arduino-preobrazovanie-ra...) Вообще задача у меня следующая На SD-карте хранится инфа об объекте в структурированных txt файлах. Я не знаю заранее, сколько объектов в определенный момент времени будет одновременно использоваться, есть только ограничение сверху (заведомо большое, 50). Выделять память под все объекты - пустая трата ресурсов, потому как реально объектов может быть 3 или 5. При этом я должен иметь возможность обратиться к каждому из элементов. Я для удобства использовал структуру и (видимо наивно) полагал, что динамический массив позволит мне выделять память под конкретный объект и затем ее освободить. Но походу delete затирает весь массив, а не отдельный элемент. Как быть в такой ситуации?
Что за МК используете? Правильно, если проверяете, что 'RuleID' и 'Index' всегда меньше 'MAX_RULES'. Правильно полагали. Нет, delete удаляет конкретный объект. При чём память не очищает, а только помечает, что она (память, участок памяти) больше ни кем не используется. Если Вы используете Arduino UNO или подобные платы, то должны понимать, что в Вашем распоряжении всего 2 кБ памяти. Эти 2 кБ имеют свойство очень быстро исчезать, особенно при динамическом выделении/освобождении памяти (есть такая штука как дефрагментация памяти).