首页 > C > 指针 阅读:57,774

函数不要返回局部变量的指针或引用

函数一定不要返回局部变量的指针或者引用。如下面的代码:

char *func(void)

{

         char c = ‘A’;

         char *p = &c;

         return p;

}

char &func(void)

{

       char c='A';

       return c;

}

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;
}

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注