gpt4 book ai didi

c - 更新全局结构体的成员

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

我正在尝试使用新节点更新全局链表。我将列表设置为指向结构的指针,每次尝试为其分配新的成员值时,都会收到总线错误 10。我对此非常着迷,因此我们将不胜感激。

代码:

typedef struct alarmItem
{
pthread_t id; //id of the thread to block/unblock
int delay; //initial delay time set by user for this alarm item
int realdelay; //adjusted delay time for this item in the queue
char function[256]; //function for this item to execute once alarm goes off
char args[256]; //arguments to pass into function, sql query or null
time_t calltime; //stores the time that this alarm item was introduced
struct alarmItem* next; //stores the next node in the linked list of alarm items
} alarmItem ;

typedef struct LinkedList
{
alarmItem* head;
} LinkedList;

LinkedList *alarmq; //empty linkedlist of alarm items

void initList()
{
if(alarmq == NULL)
printf("List is null.\n\n");
else
alarmq->head = NULL;
}

void entry_point(char **arguments)
{
char **args = (char **)arguments;

//create a new alarm item
alarmItem *new;

int d;
sscanf(args[0], "%d", &d);
new->delay = d;

strcpy(new->args, args[3]);
strcpy(new->function, args[4]);

initList();
}

entry_point 函数只是通过标准字符串命令列表从 main 方法调用。

最佳答案

您需要为 new 分配空间结构体,为此你需要 malloc()

void *entry_point(void *data)
{
alarmItem *new;
char **args;
int d;

args = (char **)data;
//create a new alarm item
new = malloc(sizeof(*new));
if (new == NULL)
return NULL; /* may be return something else for error handling */
sscanf(args[0], "%d", &d);
new->delay = d;

strcpy(new->args, args[3]);
strcpy(new->function, args[4]);

initList();
return NULL;
}

你可以看到我给你做了entry_point()函数可与 pthread_create() 一起使用.

alarmq 也是如此,其实这个条件

if (alarmq == NULL)

在程序的整个生命周期中仍然如此,我不明白 initList() 是什么意思函数应该做的,但我想它会是这样的

void initList()
{
if (alarmq == NULL)
{
alarmq = malloc(sizeof(*alarmq));
if (alarmq != NULL)
alarmq->head = NULL;
}
}

还有你的链接列表LinkedList结构并不是真正的链表,您需要有 next成员在其中而不是在 alarmItem 中结构。

关于c - 更新全局结构体的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28421546/

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