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

早先在博客文章https://blog.myzony.com/c-zai-linuxxia-huo-de-cheng-xu-yun-xing-de-jue-dui-lu-jing/当中写到的获取当前运行路径的程序,在编译的时候会提示:

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

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

char *Func()
{
    char buff[50];
    buff="fuckyou";
    return buff;
}

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

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

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