new 一个数组 为什么会出错
- C/C++ code
void findnext(const char* str,int **next){ int len=strlen(str); *next=new int(len); if(len>0){ (*next)[0]=0; if(len>1) (*next)[1]=1; int j=1,k=0; while(j<len){ if(str[j]==str[k]||k==-1){ (*next)[j+1]=k+2; j++; k++; } else{ k=(*next)[k]-1; } } } cout<<(*next)[1]<<(*next)[2]<<(*next)[3]<<(*next)[4]<<(*next)[5];}或者
- C/C++ code
int* findnext(const char* str){ int len=strlen(str); int *next=new int(len); if(len>0){ next[0]=0; if(len>1) next[1]=1; int j=1,k=0; while(j<len){ if(str[j]==str[k]||k==-1){ next[j+1]=k+2; j++; k++; } else{ k=next[k]-1; } } } return next;}只要使用了next就会出错 下面那个出错的原因是不是因为next是局部变量,只要函数结束就销毁,但怎么改呢,两个程序都不能使用next[i]....
[解决办法]
int *next=new int(len);
跟
int *next=new int[len];
是有很大区别的,前者只申请了一个int,占用4字节,并用len初始化这个int
后者申请了len个字节,共占用4*len个字节,并且未初始化这些字节。
[解决办法]
int *next=new int(len);
-----------
你这不是new一个int[],而是new了一个int,用len来初始化该指针指向的值