gpt4 book ai didi

c - 我的二分搜索(在 C 语言中工作)不断出现段错误

转载 作者:行者123 更新时间:2023-11-30 15:32:53 25 4
gpt4 key购买 nike

我在让二叉树工作时遇到一些问题。一件奇怪的事情是,当我尝试重复打印节点数据时,出现段错误。我将此视为我做错事的危险信号。这是我仅使用结构定义和插入函数编写的测试程序。有人注意到问题了吗?

   #include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <stdbool.h>


typedef struct Tnode{

char *name;
int value;

struct Tnode *left;
struct Tnode *right;

} Tnode;


Tnode *insert(Tnode *node, char *name, int value){

if(node==NULL){

Tnode *temp = malloc(sizeof(struct Tnode));

temp->name = strdup(name);
temp->value = value;

temp->left = NULL;
temp->right = NULL;

return temp;

}

else if(strcmp(name,node->name)<0)
{
node->left = insert(node->left, name, value);
}

else if(strcmp(name,node->name)>0)
{
node->right = insert(node->right, name, value);
}
else{
printf("something went wrong\n");
}

}


int main(){

Tnode *root = NULL;

root = insert(root,"george",11);
root = insert(root,"dick",12);
root = insert(root,"walter",13);
root = insert(root,"harry",13);
printf("%s\n",root->name);
root = insert(root,"zink",40);
printf("%s\n",root->name);

}

最佳答案

“insert”函数不返回任何内容,除了第一个 if (node==NULL) 情况。当您没有从应该返回值的函数返回某些内容时,该行为是未定义的;因此您可能会遇到段错误,或者它可能看起来在其他人的系统上运行,等等。

对于除了 if (node==NULL) 情况之外的所有情况,您可能需要return node;。或者,您可能需要 abort()exit() 或“出现问题”情况下的某些操作。您还应该从 main 中 return 0; ,但这不会导致您的问题。

如果您在打开警告的情况下进行编译,这些问题会更容易注意到。对于某些编译器(例如 gcc),您可以通过将 -Wall 标志传递给编译器来打开许多警告。我建议始终至少使用 -Wall 进行编译。

关于c - 我的二分搜索(在 C 语言中工作)不断出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23944307/

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