Вы выделили массив указателей в строке
eargs **targs = (eargs **) malloc(p * sizeof(eargs *));
, но сами элементы не инициализированы.Таким образом, этот segfault не имеет ничего общего с правильным использованием memset в полях структуры, но вместо этого происходит из-за использования uininitialized памяти (при условии, что у вас нет цикла для инициализации каждого объекта eargs после выделения массива указателей).
Вместо этого, если вы хотите выделить динамический массив объектов p
eargs (здесь я свободно использую термин «объекты»), вместо этого вы должны написать
eargs *args = malloc(p * sizeof(eargs));
if (!args) {
/* Exit with an error message */
}
memset(&(args[i].cs), 0, sizeof(xcpu));
.Обратите внимание, что args
- это динамически распределяемый массив объектов eargs, , а не - динамически распределяемый массив указателей, поэтому он имеет тип eargs *
, а не eargs **
.
.