C将结构列表传递给另一个函数

时间:2016-05-01 23:13:33

标签: c list struct pass-by-reference

有人能解释我发生了什么吗? 这段代码工作正常:

#include <stdio.h>
#include <stdlib.h>

typedef struct def_List List;

struct def_List {
    int x;
    int y;
    List *next;
};

typedef struct def_Figures {
    List *one;
    List *two;
} Figures;

void another_function(List *l) {
    l = (List*) malloc(sizeof(List));
    l->x = 1;
    l->next = NULL;
}

void function(Figures *figures) {
    another_function(figures->one);
}

int main() {
    Figures ms;
    function(&ms);
    printf("%d",ms.one->x);
    return 0;
}

打印“1”。 我添加第三个列表:

#include <stdio.h>
#include <stdlib.h>

typedef struct def_List List;

struct def_List {
    int x;
    int y;
    List *next;
};

typedef struct def_Figures {
    List *one;
    List *two;
    List *three;
} Figures;

void another_function(List *l) {
    l = (List*) malloc(sizeof(List));
    l->x = 1;
    l->next = NULL;
}

void function(Figures *figures) {
    another_function(figures->one);
}

int main() {
    Figures ms;
    function(&ms);
    printf("%d",ms.one->x); // 1
    return 0;
}

打印“-1992206527”。

它适用于一个或两个列表,但是当我添加第三个或更多列表时,出现问题。为什么呢?

1 个答案:

答案 0 :(得分:0)

您正在尝试修改another_function(List *l)

的参数
l = (List*) malloc(sizeof(List));

使用指向指针的指针:

void another_function(List **l) {
    *l = (List*) malloc(sizeof(List));
    ...
void function(Figures *figures) {
    another_function(&figures->one);
}    

小心:

Figures ms;
function(&ms);

虽然现在已经分配了数字struct ms,但是列表一,二和三是NULL并且没有指向任何地方。