有人能解释我发生了什么吗? 这段代码工作正常:
#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”。
它适用于一个或两个列表,但是当我添加第三个或更多列表时,出现问题。为什么呢?
答案 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并且没有指向任何地方。