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 последнего меню?
}
спасибо, надо учебники уже читать начать, уж больно интересны эти пляски с памятью
UPD:
чет рано обрадовался, игра-то вылетает все равно.
если убрать указатели на другие структуры из stMenuInfo, то все работает, но они нужны.