C++里边说函数的返回值不可以返回指向局部变量的指针。这个是绝对的么

C++里面说函数的返回值不可以返回指向局部变量的指针。这个是绝对的么?
求大神看看。并分析下。我写了一个这样的函数。
C++里面说函数的返回值不可以返回指向局部变量的指针。这个是绝对的么?
char* getStr( char* str  )
{
    char* p=0;
    p=str ;
    
    return p; 

}
p是个局部变量,随着函数调用结束,它会直接销毁,如果指针已经销毁了,那么它指向的内存还在不在?我在oc里面直接调用,
   char* str=getStr("hello");
    NSLog(@"%s",str);
得到了返回值,难道这个规则跟编译器有关么?
------解决方案--------------------
不是不可以返回。返回的只不过是个野指针而已,只要你不怕内存崩掉。
你给的例子跟标题没半毛钱关系。
------解决方案--------------------
C++里面说函数的返回值不可以返回指向局部变量的指针  ----- 实际就是指向变量A的指针,是看A的生存期,也就是说函数返回后,A是否还在生存期
------解决方案--------------------
1. 这个函数返回的并不是局部变量的指针,而是调用这个函数时实参表达式的指针,LZ的例子与标题不是一回事

2.函数可以返回“static 局部变量”的指针,可以返回本函数调用malloc( )函数得到的指针
------解决方案--------------------

int * FunRetRef()
{
    int a = 0;

    cin>>a;

    printf("FunRetRef Get inputFromUsr == %d\n", a);

    return &a;
}

void TheThirdFunc( int nVal)
{
    int i = 0;
    int arr[10] = {0};

    for ( int i = 0; i < 10; i++ )
    {
        arr[i] = i * nVal;
    }

    for (int i = 0; i < 10; i++)
    {
        cout<<arr[i]<<" ";
    }

    cout<<endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int *pRet = FunRetRef();
    cout<<"nRet Value == "<<*pRet<<endl;

    TheThirdFunc(argc);

    cout<<"nRet Value == "<<*pRet<<endl;

    return 0;
}


我闲的蛋疼。。 楼主自己调试看看吧。
------解决方案--------------------
返回的指向局部变量的指针是指向了一个已经被标记为“未使用”的内存,当然如果那个内存存的值是5的话系统也不会去清除这块内存的值,如果你打印这个内存的值 就会出现不确定因素因为 不知道什么时候内存值就会被改变。
------解决方案--------------------
引用:
那再来看一个吧。
int* test(int b)
{
    int a=0;//局部变量
    a=b; //行参复制给a
    int * p=&a ; //定义一个int* 的指针,把变量a的地址给p
  
    return p; //返回p。这个p是不是局部变量的指针?我觉得是的

}

 int * result=test(5);
    
    NSLog(@"%d",*result); 
输出结果还是5.我分析的对么?


这个p是局部变量的指针,返回的result里面目前是5,因为result指向的内存(在栈上)目前没有被破坏,因为没有其他函数调用
你可以这样

int* test(int b)
{
int a=0;//局部变量
a=b; //行参复制给a
int * p=&a ; //定义一个int* 的指针,把变量a的地址给p

return p; //返回p。这个p是不是局部变量的指针?我觉得是的

}
void test2()
{
int a[10];
for (int i = 0; i < 10; i++)
{
a[i] = i;
}
}

int *result=test(5);
printf("%d\n", *result); //此时是5
test2();
printf("%d\n", *result); //此时是一个错误的值

------解决方案--------------------
不可以返回指向局部非静态对象的指针 

顺便不是绝对的 
只是返回了不可以使用 没什么意义罢了
------解决方案--------------------
能返回,你敢用么?