gpt4 book ai didi

c - 是否需要创建指向结构的指针数组?

转载 作者:行者123 更新时间:2023-12-02 04:36:31 24 4
gpt4 key购买 nike

我已经创建了一个这样的结构

struct PCB
{
int used;
char PID[1];
struct RCB *Other_Resources;
char type[10];
struct PCB **list;
struct PCB *parent;
struct PCB *children;
struct PCB *next;
int priority;
};

然后我声明了一个结构PCB数组*
struct PCB *PCBLIST[1024];

我的问题是我是否需要malloc结构指针数组才能使用这些指针?我在这里阅读了另一个问题,我应该做这样的事情:
PCBLIST = malloc(1024 * sizeof(struct PCB *));

对此做了些微修改,我认为在最初的问题中,他们使用MAX而不是像1024那样给出实际值。

我从gcc c99得到的错误是:
error: assignment to expression with array type

但是,如果我尝试使用PCBLIST [i]-> used来访问单个结构指针,则会出现段错误。有人可以阐明我做错了什么吗?

最佳答案

您不需要动态分配数组,因为数组的声明已经分配了该数组。您需要为要指向的每个数组条目分配结构内存。就像是:

int ix;
for (ix = 0; ix < sizeof(PCBLIST) / sizeof(PCBLIST[0]); ix++) {
PCBLIST[ix] = malloc(sizeof(struct PCB));
}

请注意,这会为数组的所有条目分配内存。如果始终使用所有条目,则一种更简单的方法是通过将数组声明为结构数组而不是指向这些结构的指针数组来使用静态分配:
struct PCB PCBLIST[1024];

这样就不需要动态分配,从而简化了事情。但是以可能使用更多内存为代价,因为它不允许使用稀疏填充的数组(并非分配所有条目)。最佳使用哪种取决于您打算如何使用该阵列。

关于c - 是否需要创建指向结构的指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42101939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com