args указатель соответствующей структуры передается, и затем мне нужно назначить его другой структуре того же типа. Правильно ли назначать, как указано ниже, или требуется инициализировать память для фактических аргументов.
compute_convFWD *actual_args = args; // is this a correct assignment ?
... }
Да, это правильно. но ваш вопрос как-то неясен.
если вы передаете void*
и намереваетесь работать с этим указателем, то нет необходимости выделять через malloc()
любой буфер, просто приведите или назначьте void*
, как и вы, и ваша функция работает с указателем actual_args
.
если вы не хотите изменять исходный указатель void*
, подпись функции должна быть изменена на:
void *convolution(const void *args)
И затем вам нужно выделить память для копии *args
(это может быть в стеке функции convolution
или heap
. Это зависит от размера структуры и требований вашей функции. (вы можете скопировать часть *args
снова, это зависит от вашего convolution
logi c!).
для выделения в стеке функции convolution
:
compute_convFWD actual_args = *((compute_convFWD*)args); // this initializing can be done with memset also
для выделения в куче:
compute_convFWD* p_actual_args = (compute_convFWD*)malloc(sizeof(*(compute_convFWD*)args));
*p_actual_args = *((compute_convFWD*)args); // this initializing can be done with memset also
Опять же, если вы работаете с несколькими элементами данных исходной структуры, вы можете выделить только для размера элементов данных, которыми вы управляете (нет необходимости копировать всю структуру члены в данном случае)