Я просто хотел бы порекомендовать вам прочитать какой-нибудь учебник по Си. Мне кажется, что у вас нет четкого понимания того, как работают указатели на языке Си.
В любом случае, вот несколько примеров выделения памяти с помощью malloc.
#include <stdlib.h>
void parse_cookies(const char *cookie, cookie_bank **my_cookie, int *cookies_num)
{
if (cookies_num == NULL || *cookies_num == 0) {
return;
}
if (my_cookie == NULL) {
my_cookie = (cookie_bank**)malloc(sizeof(cookie_bank*) * *cookies_num);
}
for (int i = 0; i < *cookies_num; i++) {
*my_cookie = (cookie_bank*)malloc(sizeof(cookie_bank));
my_cookie++;
}
}
Конечно, этот пример не охватывает обработку ошибок. По сути, my_cookie - это указатель на указатель, что означает, что my_cookie - это просто указатель на точку памяти, где он содержит массив указателей. Первый malloc выделяет память, используя размер указателя и запрошенный номер структуры cookie. Затем второй malloc фактически выделяет память для каждой структуры.
Проблема этой функции в том, что она может легко вызвать утечку памяти, если не использовать это очень осторожно.
В любом случае, важно понимать, как работает указатель C.