Tri*_*han -2 c malloc linked-list
我正在尝试在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;
Run Code Online (Sandbox Code Playgroud)
当我尝试在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;
}
Run Code Online (Sandbox Code Playgroud)
如果你要保持原有功能的签名,那么你一定不能修改list
中init
.你可以这样做:
void init(linkedlist* /* const */ list){
list->size = 0;
}
int main(int argc, char** argv){
linkedlist list; //<<<
init(&list); //<<<
return 0;
Run Code Online (Sandbox Code Playgroud)