读书人

new 一个数组 为啥会出错

发布时间: 2012-10-25 10:58:58 作者: rapoo

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来初始化该指针指向的值

读书人网 >VC/MFC

热点推荐