Динамическая структура данных для Union Struct в C - PullRequest
0 голосов
/ 02 ноября 2018

Учитывая эту структуру

struct node {
    struct node* next;                              
    union {
        int lockId;
        pthread_t threadId;
    } id;
};

Как правильно инициализировать динамический массив, используя malloc / realloc для хранения указателей на эту структуру?

Я пробовал:

struct node* nodes = (struct node*)malloc(n * sizeof(struct node*));

но при компиляции я получаю сообщение об ошибке: элемент инициализатора не является константой

хотя я использую #define MAXNODES 10 На данный момент я использую статический массив (фиксированного размера), выполнив:

node *(nodes[MAXNODES]);

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 02 ноября 2018

Здесь нет проблем с вашей структурой данных, независимо от того, используется Союз или нет. Ваша проблема связана с тем, что синтаксис для создания массивов неверен.

Ниже вы можете увидеть, как создавать динамические и статические массивы:

#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);
}

Обратите также внимание, что рекомендуется проверять возвращаемое значение динамического выделения и динамическую память следует освобождать после использования.

...