大家看看这段代码,为什么会出现Debug Error,而且字符串小的时候还会有内存不能读

来源:百度知道 编辑:UC知道 时间:2024/05/29 18:31:35
void getNext(char *s,int *next,int n){
int i=1,j=0;
next[1]=0;
while(i<=n){
if(j==0||s[i]==s[j]){
i++;
j++;
next[i]=j;
}else
j=next[j];
}
}

void main(){
char *p="0asdfbgsdggerherhth";
int *next=new int[strlen(p)];
getNext(p,next,strlen(p));
for(int i=1;i<strlen(p);i++){
cout<<next[i]<<"\t";
}
delete[] next;
system("pause");
}
请详细说明,谢谢!
是不是 delete[] next有问题?

delete[] next这一句的用法是没错的,但你声明出来的next的大小为19,但你使用的时候超出了数组的边界,你可以根据一下while循环高度一下,你会发现i的值最后会是20,因此运行next[i] = j这一句就越界了,导致delete这一条指令就不能正常运行了(估计是标示内存空间结束的标志被破坏地).