Не ясно, нужно ли вам void**
или void*
.
Эта строка проблематична: stack->array= malloc(stack->capacity*size_data_type);
Вы никогда не инициализируете эту область памяти правильно.Он должен выделить место для столько void*
, сколько у вас есть объектов.Это не имеет никакого отношения к размеру данных указанных элементов.Каждый такой указатель должен быть инициализирован.Вам необходимо отслеживать общее количество указателей, а также размер каждого указанного элемента.
В качестве альтернативы вам следует сбросить void**
в пользу void*
, если предполагается, что он указывает наодномерный массив или отдельный объект.
stack->array[++stack->top]=data;
выглядит подозрительно, это оставляет индекс 0 неинициализированным.
Не забудьте включить stdlib.h
, иначе вы получите серьезные ошибки на каменном веке C90компиляторы, ошибки, которые скрывают ваши приведения.