Следующий код является частью реализации стека, реализованной с помощью связанного списка, в C. Есть ли проблемы с кодом? В частности, в методе pop()
вызывающая сторона передает аргумент void**
, поэтому pop()
может назначить ему указатель на данные верхнего узла. pop()
впоследствии вызывает delete
, чтобы освободить верхний узел стека, на который указывает *data
. Не приведет ли это к удалению данных в указателе, которые должны быть возвращены вызывающей стороне, или я что-то упустил?
typedef struct Element
{
struct Element *next;
void *data;
} Element;
bool pop( Element **stack, void **data )
{
Element *elem;
if (!(elem = *stack)) return false;
*data = elem->data;
*stack = elem->next;
delete elem;
return true;
}
bool push( Element **stack, void *data )
{
Element *elem = new Element;
if(!elem) return false;
elem->data = data;
elem->next = *stack;
*stack = elem;
return true;
}