我正在使用二叉搜索树制作电话簿程序。每当我尝试输入新数据时,就会发生分段错误。首先,我有类型定义结构,其名称为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
函数中犯了错误?
答案 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