出错代码
typedef struct {
char *ch;//按串长分配存储区,ch指向串的基地址
int length;//串的长度
}HString;
//定位操作,若主串S中存在与串T值相同的子串,则返回它在主串S中第一次出现的位置,否则,返回-1
int Index(HString S,HString T){
if (S.length < T.length)
return -1;
for (int i = 0; i < S.length; ++i) {;
HString Sub;
SubString(Sub,S,i,T.length);
bool flag = false;
if (Sub.length == T.length) {
for (int j = 0; j < T.length; ++j) {
if (Sub.ch[j] != T.ch[j]){
flag = true;
continue;
}
}
if (flag)
continue;
else
return i;
}
}
return -1;
}
错误:SIGSEGV (Segmentation fault)
经过调试,发现 那一行代码返回值结果和预期是相同的,但是就是在那一行出现 Segmentation fault,因此可能是那一行代码里面的指针有问题,经查找,是 HString 的char*指针未初始化,使用了未初始化的指针文章来源:https://www.toymoban.com/news/detail-622756.html
解决方法:
调用初始化方法对指针初始化文章来源地址https://www.toymoban.com/news/detail-622756.html
HString InitStr(HString &S){
S.ch = (char *) malloc(sizeof(char ));
if (S.ch == NULL) {
cout<<"内存分配失败"<<endl;
}
S.length = 0;
return S;
}
HString Sub = InitStr(Sub);
到了这里,关于C语言 SIGSEGV (Segmentation fault)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!