首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

new 一个数组 为啥会出错

2012-10-25 
new 一个数组 为什么会出错C/C++ codevoid findnext(const char* str,int **next){int lenstrlen(str)*n

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

热点排行