我已经建立了一个BST,可以保存专辑名称和年份,并根据年份构建。但我想输入专辑名称,它应该给一年。 所以我构建了这个代码部分:
int FindString(treeAlbum *node,char albumTitle[])
{
FindString(node->Left,albumTitle);
FindString(node->Right,albumTitle);
if(!strcpy( node->albumTitle, albumTitle))
{
return node->year;
}
}
和treeAlbum结构
struct treeAlbum{
char albumTitle[100];
int year;
struct treeAlbum *Left;
struct treeAlbum *Right;
}
最后,此代码给出错误(Segmentation Fault)。我怎样才能解决这个问题 ?谢谢。
答案 0 :(得分:1)
我对分段错误的最佳猜测是你没有检查你的基本情况。
int FindString(treeAlbum *node,char albumTitle[])
{
if (!node)
{
// Return something sane here
return ERROR_NOT_FOUND;
}
FindString(node->Left,albumTitle);
FindString(node->Right,albumTitle);
if(!strcpy( node->albumTitle, albumTitle))
{
return node->year;
}
}
但是,您的代码还有其他一些问题:
FindString
的返回值做了什么。现在你什么也没做。strcpy
,但您的意思可能是strcmp
。答案 1 :(得分:0)
您在FindString
中所做的第一件事是再次使用FindString
致电node->Left
。 node->Left
最终是null
(如果树构造正确),这将导致段错误,或者它是树中的早期节点(在这种情况下,您的递归将导致堆栈填满)。当然需要检查空案例!
答案 2 :(得分:0)
您想使用strcmp
,而不是strcpy
。您应该评估两个FindString()
来电的结果,并在他们失败时继续。