读书人

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

发布时间: 2012-02-20 21:18:24 作者: rapoo

帮我看看这么写有问题没
程序如下:
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 ";
}

读书人网 >C++

热点推荐