给出此结构
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]);
任何帮助将不胜感激!
答案 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);
}
还请注意,优良作法是验证动态分配的返回值,并且使用后应释放动态内存。