c - C语言struct数组

标签 c struct

在我的程序中,我必须创建结构,在我的例子中,我有结构处理器,这里是我的示例:

struct Processor{
    int id;
    struct Task **task;
}

主要是我创建了一组处理器(例如 2 个处理器),我必须使用此函数在每个处理器中添加任务 struct Processor * create_processor(int id, struct Task **task );

函数如下:

struct Processor * create_processor(int id, struct Task **task){
    struct Processor * pr = (struct Processor *) (malloc(sizeof(struct Processor)));
    pr->id = id;
    //how to initialize Task set??
    return pr;
}

现在如何在函数中初始化任务集?以及如何使用任务集的元素?我使用了 processor[1]->task[1]->id = 5; 但它返回错误 Segmentation fault (core dumped)

请帮忙

最佳答案

当你做的时候

struct Processor * pr = (struct Processor *) (malloc(sizeof(struct Processor)));

您现在已经初始化了一个空的 Processor 结构。由于该结构的 task 成员是一个指针(实际上是一个双指针),您在新初始化的 Processor 中拥有的所有内容都等同于: struct Processor { id : 0, task: 0 } ,即它只包含 task 成员的空指针。这可能就是您得到 Segmentation fault 的原因,这是当您的程序访问未初始化的内存时发生的错误类型。

您还必须为每个处理器必须执行的许多任务分配 Task*(任务指针)数组。例如

pr.task = (struct Task **) malloc(sizeof(struct Task *) * N_TASKS);  // pr.task should probably be called pr.tasks??

然后你还需要为每个实际任务初始化内存:

for (int idx = 0; idx < N_TASKS; idx++) {
    pr.task[idx] = (struct Task *) malloc(sizeof(struct Task));
}

对于您要初始化的每个 Processor 依此类推。

关于c - C语言struct数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54949639/

相关文章:

c - 如何更新结构体中的字段?

pointers - 如何修改嵌套结构的属性值

c - 包含 scanf 和 file 的结构

为 goto 函数创建外部标签以跨源文件工作

c - 在 C 中使用头文件

c - 将 char 字符串解析为 INT C 编程

c - 如何在程序集中创建结构成员指针?

c++ - C和C++中带有序列点和UB的差异

检查 pthread mutex 是否被锁定或解锁(在线程锁定自身之后)

c - 在 ANSI C 的通用访问器函数中使用空指针