Проблема в том, что вы создаете указатель на struct queens_arg
, но не инициализируете его, чтобы указывать куда-либо.Следовательно, когда вы пишете
(*args).focus_idx = 0;
Вы следуете за указателем мусора, вызывая segfault во время выполнения.
Чтобы это исправить, убедитесь, что вы установили указатель так, чтобы он указывал куда-то.Вот как вы можете указать, чтобы оно указывало на динамически выделяемую память:
struct queens_arg* args = malloc(sizeof (struct queens_arg));
В связанной заметке вам не нужно писать
(*args).focus_idx = 0;
Вместо этого вы можете использовать эту сокращенную запись:
args->focus_idx = 0;
Это означает то же самое, но немного легче для чтения.