temp
выделяется в пространстве, используемом для объектов с «автоматическим сроком хранения» - обычно это в стеке времени выполнения, но вам не нужно знать подробности. Пространство освобождается при выходе из блока, в котором оно было выделено (в вашем случае, когда вы нажимаете return
).
Строка *hallocp = temp;
действительно копирует значение temp
в память, на которую указывает hallocp
, то есть hallocbuf[0]
.
Проблема в том, что temp
является просто указателем - и он не указывает на . Это называется «висячий указатель». Это означает, что когда вы пытаетесь получить доступ к тому, на что он указывает, у вас появляется ошибка. Это происходит в следующих строках:
temp->size = 0;
temp->first = NULL;
temp->last = NULL;
temp->current = NULL;
Вы не можете разместить свои структуры в памяти, выделенной для hallocbuf
, потому что в ней нет места для структур - это просто массив указателей, а не массив структур.