gpt4 book ai didi

c - 在另一个静态结构中静态分配结构成员?

转载 作者:行者123 更新时间:2023-11-30 15:15:11 27 4
gpt4 key购买 nike

我正在尝试在不使用动态内存分配的情况下实现低级线程锁;该代码基本上将在完全裸露的内核上使用。

但是,当我尝试取消引用此全局静态结构内的成员时,我遇到了接收段错误的问题。我的代码是这样的

我的包装结构

/** LOCKING STRUCT & FUNCTIONS **/
struct lock {
int free;
struct thread_list* wait_list;
struct thread* current_holder;
};

嵌套结构(旨在作为链表排序)

struct thread_list {
struct thread *head;

};

以及此列表中的成员

struct thread {
void *top; // top of the stack for this thread
void *sp; // current stack pointer for this thread (context)
void (*start_func)(void *);
void *arg;
int state;
int exit_value;
struct thread *join_thread;
struct thread *next_thread;
int id;
};

我试图实现的方法就是这样

void lock_init (struct lock *lk) {
lk->free = 1; //Set lock as free
struct thread_list waiting = lk->wait_list; //Get waitlist, works fine
waiting->head = NULL; //Set waitlist's head to null, SEGFAULTS HERE
}

我不太精通 C,但我似乎无法找出正确的方法/语法来让我的代码像这样工作。

最佳答案

struct thread_list waiting = lk->wait_list; //Get waitlist, works fine
waiting->head = NULL; //Set waitlist's head to null, SEGFAULTS HERE

waiting 不是一个结构体指针,而是一个结构体变量。要使用它访问成员,您需要使用 . 运算符 -

 waiting.head = NULL;

或者使用 -> 运算符将其声明为结构指针。

关于c - 在另一个静态结构中静态分配结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33716741/

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