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

帮小弟我看看这么写有有关问题没

2012-02-20 
帮我看看这么写有问题没程序如下:voida(char*cp){cpnewchar[3]cp[0] abc cp[1] ABC cp[2] 5 }

帮我看看这么写有问题没
程序如下:
void   a(char*   cp)
{
        cp   =   new   char[3];
        cp[0]= "abc ";
        cp[1]= "ABC ";
        cp[2]= '5 ';
}
void   b(char*   cp,int*   np)
{
        char*   bcp;
        a(&bcp);
        np   =   new   int[3];
        for(int   i=0;i <3;i++)
        {
                np[i]=atoi(bcp[i]);
        }
}
void   c()
{
        char*   ccc;
        int*   ncc;
        a(&ccc);
        b(ccc,&ncc);
        delete   []ccc;
        delete   []ncc;
}

[解决办法]
void a(char* cp)
{
cp = new char[3];//给参数分配空间?
cp[0]= "abc ";
cp[1]= "ABC ";
cp[2]= '5 ';
}
void b(char* cp,int* np)
{
char* bcp;
a(&bcp);//bcp未初始化,能作实参吗?这样:char* bcp=cp;

np = new int[3];
for(int i=0;i <3;i++)
{
np[i]=atoi(bcp[i]);
}
}
void c()
{
char* ccc;
int* ncc;
a(&ccc);//未初始化
b(ccc,&ncc);
delete []ccc;
delete []ncc;
}

[解决办法]
void a(char* cp) //你是想通过这个参数来申请一块内存,那要改为:char *&cp
{
cp = new char[3];
cp[0]= "abc "; //cp[0]只有一个空间,改为cp[0]= 'a ';
cp[1]= "ABC "; //cp[1]= 'b ';
cp[2]= '5 '; //cp[2]= 'c ';
}
void b(char* cp,int* np) //这个参数也有上面的错误,要改为(char* cp,int *&np)
{ //这样,np那里才能传得回去

char* bcp;//这是不是多余了,完全可以直接用cp

a(&bcp); //因为a里面的参数是指针的引用,这里改为a(bcp),你原来的方法
np = new int[3]; //是不行的,要求的是形参那边是引用,你这边取地址没有用.达不到
for(int i=0;i <3;i++) //你的目的
{
np[i]=atoi(bcp[i]);
}
}
void c()
{
char* ccc;
int* ncc;
a(&ccc); //同上,改为a(ccc);
b(ccc,&ncc); //改为b(ccc,ncc);
delete []ccc; //实际上你这里还是有内存的泄露,因为在b里面调用了一次a,
delete []ncc; //b运行结束得到的ccc是指向一个新的内存的指针,原来ccc指向的那块
} //已经丢失了.

[解决办法]
void a(char* *cp) //如果你想输入一个字符串的话可以这么改
cp = new char*[3];
cp[1]= "ABC ";
cp[0]= "abc ";
cp[2]= "5 ";
}

热点排行