Как правильно создавать структуры??
- Войдите на сайт для отправки комментариев
Чт, 16/02/2017 - 13:52
Доброе время суток!
Есть структуры
struct TBoard { byte Device_Adress; byte Type_ID = 0; byte SA_ID = 0; byte Func_ID = 0; struct TValues Values; struct TLink Link; }; struct TDevice { byte Device_ID; struct TBoard Board[MAX_BOARDS_ON_DEVICE]; bool Tested; };
Я хочу иметь возможность динамически создавать объекты типа TDevice
Device= new TDevice;
но при этом иметь возможность обращаться к конкретному созданному объекту.
Я сначала поступил по простому, создал массив
TDevice* Device[MAX_DEVICE_COUNT];
и уже внутри массива создавал объект
Device[DeviceNum] = new TDevice;
Я был уверен, что память для объектов выделяется по мере их создания. Но оказывается в памяти висит весь массив, не смотря на то, что он практически пустой.
Вопрос, как динамически создавать в памяти объекты, но иметь к ним доступ.
Заранее спасибо за ответы
Нашел вот такой хитрозадый пример
Получается при создании нового объекта нужно переопределить размер массива. Будет ли такое работать в ардуино?
создал массив
и уже внутри массива создавал объект
Я был уверен, что память для объектов выделяется по мере их создания.
Так и есть. Вы создали массив указателей на объекты. Так вот, массив указателей у Вас в памятие сразу весь. А сами объекты получают память по мере создания.
Не знаю, что именно Вам нужно, но если Вам надо, чтобы память выдялалсь строго по мере надобности и не резервировалась ни под какой масси указателей, то я бы не стал делать перезапрос памяти под массив, как в том примере - это некрасивая операция, связанная с фрагментацией памяти. Я бы сдела список.
Список - это когда каждых элемент содержит указатель на следующий.
Но при это и работать с ним нужно будет как со списком. Т.е. нельзя сразу взять и перейти к i-ому по индексу, а надо идти от начала списка "к следующему", от того "к следующему" и т.д. по всему списку.
Т.е. не зная задачи тут трудно советовать.
А как подсчитать, сколько памяти выделяется на массив указателей?
Ну, уможьте размер одного указателя на их количество.
Размер одного указателя, если не знаете, можно легко узнать
понял. спасибо!!!