尝试打印到文件时在C中出现分段错误错误

时间:2018-11-22 00:19:47

标签: c segmentation-fault binary-tree

我创建了一个函数,该函数应该在参数中获取二叉树,在用户输入中输入文件名,并在该文件内部打印二叉树,以便稍后通过graphviz转换为图片。

提供的二叉树类型为:

struct noeud_s;

typedef struct noeud_s noeud;

typedef noeud* arbre;

struct noeud_s{
  char* valeur;
  arbre gauche;
  arbre droit;
};

我创建的2个函数是:

void create_dot(arbre racine)
{
  FILE *f;
  char file_name[100];
  printf ("Nom du fichier a creer (Ajouter .dot a la fin): ");
  scanf ("%s", file_name);
  printf("Name: %s\n", file_name);
  printf ("Creation du fichier dot\n");
  f = fopen(file_name, "w");
  if (f == NULL)
  {
    printf("NULL\n");
  }
  fprintf(f, "digigraph tree {\n");
  write_to_dot(f, racine);
  fprintf(f, "}");
  fclose(f);
}

void write_to_dot(FILE *f, arbre racine)
{
  if (racine == NULL)
  {
    return;
  }
  if (racine != NULL)
  {
    fprintf(f, "%s -> %s [label = \"non\"]\n", racine -> valeur, racine -> gauche -> valeur);
    fprintf(f, "%s -> %s [label = \"oui\"]\n", racine -> valeur, racine -> droit -> valeur);
    write_to_dot(f, racine -> gauche);
    write_to_dot(f, racine -> droit);
  }
  return;
}

就调试而言,我推断出我的分段错误发生在write_to_dot函数内部。但是由于我无法正确处理gdb,我希望您能帮助我找到细分错误并进行解释。

1 个答案:

答案 0 :(得分:2)

代码正在打印出一棵二叉树。没有代码显示如何构造节点,但是在典型的二叉树中,叶节点具有NULL左右子节点(或gauchedroit)。 / p>

函数write_to_dot将在第一个叶子节点(如果不是在中间分支节点的空侧)失败,因为racine->gaucheracine->droit将是{{ 1}},但是它们仍然被取消引用-NULL,没有进行任何检查。

虽然我没有所有代码,但至少对此条件进行测试将解决以下问题之一:

racine->gauche->valeur