struct stMenuInfo
{
const char *mname;
struct stMenuInfo *pmenu;
struct stMenuInfo *cmenu;
unsigned int bcount;
struct stButtonInfo *btn;
};
struct stMenuInfo* mdata;
unsigned int mcount = 0;
unsigned int madd(const char* mname)
{
// Есть массив меню и их количество.
// realloc - это функция, которая изменяет количество выделенной памяти
// для нашего участка памяти (массива mdata)
// и возвращает содержимое предыдущего участка, то есть наш массив с +1 элементом.
// То есть, мы должны присвоить mdata её return,
// а в аргументах указать участок для которого хотим выделить память
// и количество выделенной памяти.
// То есть, mdata и ++mcount (сразу добавляем 1 к mcount, важно чтобы ++ стояло перед переменной, загугли почему если не знаешь)
// умножить на размер структуры.
// Таким образом, у нас есть массив который содержит все те же элементы,
// но у которого появился еще один элемент с "мусором".
mdata = (struct stMenuInfo *)realloc(mdata, ++mcount * sizeof(struct stMenuInfo));
// Очищаем "мусор".
// Почему mcount - 1? Потому что у нас отсчет не с 1, а с 0 и последний элемент это всегда = количество_меню - 1.
memset(&mdata[mcount - 1], 0, sizeof(struct stMenuInfo));
mdata[mcount - 1].mname = _strdup(mname);
return mcount - 1; // возвращаем id последнего меню?
}