为什么我会在这方面出现分段错误
Why do I get Segmentation Fault on this?
我正在尝试使用二进制搜索树按字母顺序排列一些单词。这是代码的一部分:
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],因为您不知道哪个字符数组包含最长的单词。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?