gpt4 book ai didi

c - 出现段错误。不知道为什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:07 26 4
gpt4 key购买 nike

我正在制作一个带有二叉搜索树的电话簿程序。每当我尝试输入新数据时,都会发生段错误。首先,我有名称为 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 函数上犯了任何错误?

最佳答案

And by the way, the variable 'root' is a global variable which is a double pointer initialized as NULL. (phoneData **root = NULL;)

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

将声明更改为:

phoneData *root = NULL;

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

关于c - 出现段错误。不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40718692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com