c - 错误 "Segmentation fault (core dumped)",错误在哪里?

标签 c

练习要求创建一个管理剧院的函数:我想要一个链表,其中每个元素是一行(观众)及其空闲座位数(该行中)以及每个座位的子列表。这是我制作列表的函数,错误在哪里?

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/

相关文章:

c - 努力使用 calloc 和 realloc 在 C 中初始化数组

c - 读取文件并只获取整数并继续直到结束

c - 使用 chdir 更改 c 中的工作目录

c - 使用 AVX-512 收集/分散 16 位整数

c - execvp() 在我的 shell 中不工作

c - Lex/Flex - 拆分电话号码?

c - 在 C 中实现排序数组的二进制搜索

c - MPI 错误 : subscripted value is neither array nor pointer

c - 如何将信号传递给另一个进程?

c - 如何使用 WM_COPYDATA 在使用 JNI 的 Java 程序之间发送字符串?