为什么我会在这方面出现分段错误

Why do I get Segmentation Fault on this?

本文关键字:分段 错误 在这方面 为什么      更新时间:2023-10-16

我正在尝试使用二进制搜索树按字母顺序排列一些单词。这是代码的一部分:

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];
}

您正在数组边界之外进行索引。在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",则a[i]==b[i]将不会被求值。您需要同时检查a[i]和b[i],因为您不知道哪个字符数组包含最长的单词。