Без минимально скомпилируемого проверяемого примера , включенного в ваше сообщение, это будет ограничено общими предложениями:
Одна потенциальная проблема заключается в том, что прототип:
void array_list_check_and_realloc(array_list_t* array);
Необходимо изменить, чтобы разместить указатель на объект, который должен быть выделен в памяти:
void array_list_check_and_realloc(array_list_t **array)
Это грубое желание также изменит способ его вызова и код внутри него.function.
Некоторые комментарии к именованию:
Используемая структура включает имя члена array
.Следующие прототипы также включают в себя экземпляр аргумента всей структуры с именем array
.:
void* array_list_free(array_list_t* array);
void array_list_check_and_realloc(array_list_t* array);
Хотя это допустимо, это может сбивать с толку.
Использование постфикса _t
для обозначения вашей структуры array_list_t
также не рекомендуется по причинам, объясненным здесь .
Некоторые комментарии кВаша структура struct:
При создании структуры, которая будет использоваться для связанных списков, обычно, как и вы, обычно добавляется тег структуры, но также включается экземпляр указателя структуры в качестве члена.Это вы еще не сделали, но вы должны это учитывать.
Например, рассмотрите возможность изменения исходной структуры из этого:
typedef struct array_list{
void** array;
size_t size;
size_t capacity;
}array_list_t;
на что-то более похожее на это: (включает исключение '_t'постфикс из имени typedef.)
typedef struct array_list{
size_t size;
size_t capacity;
struct array_list *array //this becomes new nodes of your list.
}ListNode;