获得分段错误。无法弄清楚为什么

时间:2016-11-21 11:08:28

标签: c linux data-structures binary-search-tree

我正在使用二叉搜索树制作电话簿程序。每当我尝试输入新数据时,就会发生分段错误。首先,我有类型定义结构,其名称为phoneData.

typedef struct phoneData {
    char name[NAME_LEN];
    char phoneNum[PHONE_LEN];
    struct phoneData *right, *left;
} phoneData;

void InputPhoneData()
{   //phoneData *pData;
    char name[NAME_LEN];
    char phoneNum[PHONE_LEN];

    /*if ((pData = (phoneData*)malloc(sizeof(phoneData))) == NULL) {
        fprintf(stderr, "Memory Allocation failed\n");
        return;
      }*/

    fputs("이름 입력: ", stdout);
    if (fgetString(name, NAME_LEN, stdin) == 1) {
        getchar();
        return;
    }

    fputs("전화번호 입력: ", stdout);
    if (fgetString(phoneNum, PHONE_LEN, stdin) == 1) {
        getchar();
        return;
    }

    insert_node(name, phoneNum);
    numOfData++;

    fputs("입력이 완료되었습니다.", stdout);
    getchar();
}

这是我调用输入数据的功能。请不要介意韩语句子。在函数中,我调用另一个函数insert_node。这是插入二叉搜索树节点的函数。

void insert_node(char name[], char phoneNum[])
{
    phoneData *p, *t;
    phoneData *n;

    t = *root;
    p = NULL;

    while (t != NULL) {
        if (strcmp(name, t->name) == 0) 
            return;

        p = t;
        if (strcmp(name, p->name) < 0)
            t = p->left;
        else
            t = p->right;
    }

    n = (phoneData*)malloc(sizeof(phoneData));
    if (n == NULL)
        return;

    strcpy(n->name, name);
    strcpy(n->phoneNum, phoneNum);
    n->left = n->right = NULL;

    if (p != NULL) {
        if (strcmp(p->name, name) < 0)
            p->left = n;
        else
            p->right = n;
    }
    else
        *root = n;
}

我仍然想知道哪个是我遇到分段错误的部分。我已经检查了fgetString函数,似乎没问题。我是否在InputPhoneData函数或insert_node函数中犯了错误?

2 个答案:

答案 0 :(得分:3)

  

顺便说一下,变量&#39; root&#39;是一个全局变量,它是一个初始化为NULL的双指针。 (phoneData ** root = NULL;)

那就是你的问题。 *root将取消引用NULL指针。

将声明更改为:

phoneData *root = NULL;

并在其余代码中将*root替换为root,将root替换为&root

答案 1 :(得分:0)

调试此类问题将变得简单,有趣和有趣。 尝试使用gdb进行调试:)

您可以查看以下链接, http://www.thegeekstuff.com/2010/03/debug-c-program-using-gdb