Здесь нет проблем с вашей структурой данных, независимо от того, используется Союз или нет.
Ваша проблема связана с тем, что синтаксис для создания массивов неверен.
Ниже вы можете увидеть, как создавать динамические и статические массивы:
#include <stdlib.h>
#include <pthread.h>
#define MAX_NODES 10
struct node {
struct node *next;
union {
int lockId;
pthread_t threadId;
} id;
};
int main()
{
struct node nodes_static[MAX_NODES];
int n = MAX_NODES;
struct node* nodes_dynamic = (struct node*)malloc(sizeof(struct node) * n);
}
Обратите также внимание, что рекомендуется проверять возвращаемое значение динамического выделения и динамическую память следует освобождать после использования.