当我们从函数返回时,如果返回值是一个指针,它必须定义为静态的。对于堆内存分配的指针(例如new/malloc指针)也是如此吗?
考虑这个例子:
#include"stdio.h"
char * func()
{
char * X=new char[10];
X[0]='C';
x[1]='\0';
return X;//is it a good return from function?
}
main()
{
char * A=func();
puts(A);
delete[] A;
}
Run Code Online (Sandbox Code Playgroud)
正如其他人已经指出的那样,从技术上讲,代码是可以的。
然而,代码的真正问题是函数签名char * func()。它只指定它将返回一个指向字符的指针。该指针可以是
指针可以指向
除非您想信任文档或调查可能的大量代码(函数调用函数调用函数......),否则无法知道该怎么做。
这可以通过返回来避免
手动内存管理很难在一个完整的应用程序中正确完成,永远不应成为您的主要关注点,因此应该避免它,而不是被返回指针的函数隐藏。