C

时间:2018-11-02 15:46:27

标签: c pointers dynamic struct allocation

给出此结构

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

使用malloc / realloc存储指向该结构的指针的动态数组的正确方法是什么?

我尝试过:

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

但是我在编译时收到一条错误消息: initializer元素不是常量

即使我正在使用#define MAXNODES 10 就目前而言,我目前正在通过以下方式使用静态数组(固定大小):

node *(nodes[MAXNODES]);

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

这里的数据结构没有问题,是否使用Union都没有关系。 您的问题来自以下事实:创建数组的语法不正确。

在下面,您可以看到如何创建动态和静态数组:

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

还请注意,优良作法是验证动态分配的返回值,并且使用后应释放动态内存。