看看这个函数的返回值用法正确吗?
在一个函数中产生一个字符串,想把这个字符串做为返回值返回,这样写的函数:
char* strfun()
{
char ch[5];
//给ch分别赋值
return ch;
}
这样返回一个指针值,可是ch本身是局部的自动变量,会不会产生什么不可预料的结果?应该怎样比较合适?
[解决办法]
这样返回肯定是不对的,ch是局部变量,函数执行结束就销毁了,会产生无法预料的结果。
char* strfun()
{
char *ch;
//申请空间
//给ch分别赋值
return ch;
}
[解决办法]
你可以new一块内存,然后返回这块内存的地址。
但是一定要记住必须在外边对new的内存进行释放。
[解决办法]
错误。
正确的做法应该是在外面申请一块空间,通过函数参数传入,对传入的指针赋值修改。
char* strfun(char* ch)
[解决办法]
这样返回肯定是不对的,ch是局部变量,函数执行结束就销毁了,会产生无法预料的结果。
char* strfun()
{
char *ch;
//申请空间
//给ch分别赋值
return ch;
}
可以
----------------------------------------
你可以new一块内存,然后返回这块内存的地址。
但是一定要记住必须在外边对new的内存进行释放。
可以
-----------------------------
也可以
char* strfun()
{
static char ch[5];
//给ch分别赋值
return ch;
}
错误。
正确的做法应该是在外面申请一块空间,通过函数参数传入,对传入的指针赋值修改。
char* strfun(char* ch)
??,为什么错误?
[解决办法]
这是其一
char* strfun(int iStrLen)
{
char *p;
p = (char *)malloc(iStrLen*(sizeof(char)));
//给p分别赋值
return p;
}
调用 char *pChar = strfun(字符串长度);
其二也可以用指针的指针:
void strfun(char **p)
{
*p = (char *)malloc(iStrLen*(sizeof(char)));
}
调用 char *p = NULL;
strfun(&p);
[解决办法]
mark一下
[解决办法]
弄清楚栈和堆的区别,你就会少问很多问题
[解决办法]
栈和堆的区别:
栈是指在一个函数中申请的内存,比如 char ch[20] ,在函数结束后,内存会自动回收
堆是指动态分配的内存,比如 用malloc、new等申请的内存,在函数结束后,不会自动回收,需要程
序员自己调用free、delete释放内存,否则会导致内存泄漏
[解决办法]
错了~lz这样做是忽视了局部变量的作用域
当然具体的原因ls的诸位已经说的非常清楚了