函数不要返回局部变量的指针或引用
函数一定不要返回局部变量的指针或者引用。如下面的代码:
char *func(void)
{
char c = ‘A’;
char *p = &c;
return p;
}
在func函数中,我们将局部变量c的地址当做一个指针返回,那么在main函数中,我们是不能够再次使用或者访问这个指针所指的内存的。因为局部变量c的生命周期只存在于函数func运行期间。一旦func结束运行之后,那么c就被销毁了,c的地址就是一个无效的内存地址,因此,当在main函数中执行了:
pc=func() ;
pc指向的内存是无效的内存,因此pc是一个野指针,试图访问一个野指针,其后果是未定义的,程序有可能崩溃,有可能访问的是垃圾值。
int main(void)
{
char * pc = NULL;
pc = func();
printf(“%c”, *pc);
return 0 ;
}
不要返回局部变量的指针或引用:
char * func(void)//局部变量的指针,err
{
char c='x';
return &c;
}
char &func(void)//局部变量的引用,err
{
char c='x';
return c;
}
char func(void)//ok
{
char c='x';
return c;
}
char *func(void)//ok
{
char *c=(char *)malloc(100);
return c;
}