关于函数返回局部指针变量的思考

早先在博客文章 《在Linux下获得程序运行的绝对路径》 当中写到的获取当前运行路径的程序,在编译的时候会提示:

warning : address of local variable ‘current_path’ returned [-Wreturn-local-addr]

大概意思就是说current_path是局部指针,如果返回的话,因为函数结束后会释放掉指针指向的地址空间,所以提示这个警告。 举个例子:

1
2
3
4
5
6
char *Func()
{
    char buff[50];
    buff="fuckyou";
    return buff;
}

最后调用这个函数并不会返回我们指定的字符串,但是在我们获得路径的程序里面却能够正常返回,这是为什么呢? 回想之前文章里面为保存路径所分配的数组大小是 1024,缩小成 50 也是会得到如上错误。 其实这个写法本身就是错误的,因为我们的程序只是恰好在访问到未被覆盖的内存地址而已。 引用 CSDN C 语言版主 paschen说法

这是一种不确定行为,你输出的值和函数中的一样只能说明他该值还未被其他值覆盖,如果你调用其他函数等,之前指针所指的内存可能就被其他数据覆盖了,所以不要返回局部变量的指针

所以请严格按照 C++ Primer 4th 的 p214~p215 的说法,千万不要返回局部对象的引用或者局部对象的指针,因为一旦函数执行完毕之后会销毁掉!

Built with Hugo
主题 StackJimmy 设计