练习要求创建一个管理剧院的函数:我想要一个链表,其中每个元素是一行(观众)及其空闲座位数(该行中)以及每个座位的子列表。这是我制作列表的函数,错误在哪里?
struct posto {
int stato;
struct posto *next;
};
typedef struct posto Posto;
typedef struct posto *PuntatorePosto;
struct fila {
int numero;
PuntatorePosto Lista;
struct fila *next;
};
typedef struct fila Fila;
typedef struct fila *PuntatoreFila;
typedef enum {
false,
true
} Boolean;
struct fila *crealista() {
struct fila *p, *ultimo, *ultimino;
struct posto *p1, *p2;
int i, j, n, m;
do {
printf("\t\t\tCreazione della lista\n\nDa quante file %c composta la "
"platea ? ",
138);
scanf("%d", &m);
printf("Quanti posti per fila ? ", 138);
scanf("%d", &n);
} while (n < 0);
if (n == 0)
p = NULL; /* lista vuota */
else {
p = (struct fila *)malloc(sizeof(struct fila));
ultimo = p;
ultimo->numero = 1;
for (i = 2; i <= m; i++) {
ultimo->next = (struct fila *)malloc(sizeof(struct fila));
ultimo = ultimo->next;
ultimo->numero = i;
}
ultimo->next = NULL;
ultimino = p;
p2 = ultimino->Lista->next;
for (i = 1; i <= m; i++) {
printf("Fila %d posto 1", i);
scanf("%d", &p2->stato);
for (j = 2; j <= n; j++) {
p2->next = (struct posto *)malloc(sizeof(struct posto));
p2 = p2->next;
printf("Fila %d posto %d", i, j);
scanf("%d", &p2->stato);
}
ultimino = ultimino->next;
p2 = ultimo->Lista->next;
}
ultimino->next = NULL;
}
return (p);
}
最佳答案
最好的办法是在调试器或内存访问验证器中运行程序。
一个选项是 gdb,可以使用命令 gdb ./yourprogaram 启动。接下来,您必须使用命令 run 开始运行它。稍后您可以查看崩溃的回溯并读取程序内存中的变量。
另一个选项是 valgrind,它执行内存访问检查并打印有关错误的有用信息。
掌握调试工具对于程序员来说是一项非常重要的技能。这就是为什么最好从一开始就在简单的程序上尝试它们。
关于c - 错误 "Segmentation fault (core dumped)",错误在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25470733/