为什么我会收到Segmentation Fault?

时间:2015-11-21 10:54:39

标签: c++ binary-search-tree

我正在尝试使用二叉搜索树按字母顺序排列多个单词。以下是代码的一部分:

int wordCmp (char a[], char b[])
{
int i = 0;
while(a[i] == b[i])
    ++i;
return a[i] < b[i];
}
void Insert (node* &root , char a[])
{
if(root == NULL)
    root = CreateNewNodde(a);
else
{
    if (wordCmp(a,root -> word))
        Insert(root -> left , a);
    else Insert(root -> right, a);
}

}

我在这条指令上得到了分段错误错误:

int wordCmp (char a[], char b[])
{
int i = 0;
- > while(a[i] == b[i]) <- Segmentation Fault
    ++i;
return a[i] < b[i];
}

1 个答案:

答案 0 :(得分:2)

您正在数组范围之外编制索引。在C ++中,数组不知道它的长度。请记住,通过在末尾加上字符'\ 0'来“终止”字符数组。该值将在布尔表达式中转换为false。

因此你必须这样做

int wordCmp (char a[], char b[])
{
    int i = 0;
    while(a[i] && b[i] && a[i] == b[i])
        ++i;
    return a[i] < b[i];
}

请注意,我正在检查a [i]和b [i]是否有效,即它们不包含'\ 0'。此外,在C ++中,表达式从左到右进行计算,因此 如果a [i]或b [i]包含'\ 0',则不会评估[i] == b [i]。 您需要同时检查[i]和b [i],因为您不知道哪个char数组包含最长的单词。