Holder hold;
Это объявляет hold
как переменную типа Holder
.hold
неинициализировано.
Holder *heapHold = memcpy(heapHold, &hold, sizeof(Holder));
memcpy(dest, source, size)
копирует size
байтов от source
до dest
.Предполагается, что dest
правильно распределен.Поскольку вы не выделяете для него память, вы получаете ошибку.
Вам необходимо выделить память:
Holder *heapHold = malloc(sizeof *heapHold);
if (heapHold == NULL) {
/* failed to allocate, handle error here */
} else {
/* OK to copy. Make sure you initialize 'hold' to something valid */
memcpy(heapHold, &hold, sizeof *heapHold);
}
Также memcpy()
возвращает первый параметр.Присвоить возвращаемое значение heapHold
все равно, что сказать a = a;
, то есть он ничего не делает.В большинстве практических случаев возвращаемое значение memcpy()
игнорируется.