c语言,这个kmp算法有问题吗,运行后死循环
void GetNext(int* next,char* sub,int subl){ //next[i]记录了sub[i]前,不包括自己的最长公共前后缀
next[0]=0;
int i=0;
int j=1;
int l=0;
while(i<subl-1){
if(sub[i]==sub[j]){
i++;
j++;
l++;
next[j]=l;
}
else if(i==0){
next[j]=0;
j++;
}
else{
i=next[i];
l=next[i];
}
}
}
int KMP1(char* str,char* sub,int strl,int subl){ //没用到nextval数组
int* next=(int*)malloc(sizeof(int)*subl);
GetNext(next,sub,subl);
int i,j;
i=j=0;
while(i<strl&&j<subl){
if(str[i]==str[j]){
i++;
j++;
}
else{
j=next[j];
}
}
free(next);
if(j==subl){
return i-subl;
}
return -1;
}