gpt4 book ai didi

c - 使用 malloc (C89) 在 main() 之外初始化结构

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

我正在尝试用 C 实现双向链表,我需要使用初始化函数,同时维护大小字段。我的代码如下:

typedef struct element{
struct element* next;
struct element* prev;
int value;
}element_t;

typedef struct linkedlist{
element_t* head;
element_t* tail;
int size;
}linkedlist;

void init(linkedlist* list){
list = malloc(sizeof(linkedlist));
list->size = 0;
}

int main(int argc, char** argv){
linkedlist* list;
init(list);
return 0;

当我尝试在 init 函数中访问 list->size 时,我得到了正确的值,但是当我尝试从 main 访问 list->size 时,程序返回一个奇怪的大负值(可能是一个地址以十六进制表示)。

我想知道我做错了什么。包含 stdlib。

最佳答案

您只是修改了 list 的本地副本,而 main 永远不会看到它。您可能想做这样的事情:

linkedlist* init(void) { // <<<
linkedlist* list = malloc(sizeof(linkedlist)); // <<<
list->size = 0;
return list; // <<<
}

int main(int argc, char** argv){
linkedlist* list = init(); // <<<
return 0;
}
<小时/>

如果必须保留原始函数签名,则不得修改 init 内的 list。你可以这样做:

void init(linkedlist* /* const */ list){
list->size = 0;
}

int main(int argc, char** argv){
linkedlist list; //<<<
init(&list); //<<<
return 0;

关于c - 使用 malloc (C89) 在 main() 之外初始化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41444438/

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