回 帖 发 新 帖 刷新版面

主题:[转帖]返回局部数组指针可以吗?会不会有问题?

#include <iostream.h>

int *f()
{
    int t[10]={1,2,3,4,5,6,7,8,9,10};

    return t;
}
int main ()
{
    int  *p=NULL;
    p=f();
    cout<<p[5]<<endl;
    return 0;
}

为什么可以返回局部数组指针呢?

回复列表 (共3个回复)

沙发

局部变量是存放在栈里,当一个函数返回后它之前的栈中的数据没有任何保护,之后的操作很可能会改写这些数据的值,再使用这些数据的话肯定是错的。调用者可以向被调用者传递局部变量指针,因为这时调用者没有返回,它栈中的变量不会变改写。被调用者不应该向调用者传递局部变量指针,因为被调用者返回后调用者进行的操作很可能会改写被调用者之前使用的栈,在调用者中再使用就出错了。

板凳

[code]
#include <iostream.h>
void Test()
{
    int t[10]={1,2,3,4,5,16,7,8,9,10};
}
int *f()
{
    int t[10]={1,2,3,4,5,6,7,8,9,10};

    return t;
}
int main ()
{
    int  *p=NULL;
    p=f();
    Test();
    cout<<p[5]<<endl;
    return 0;
}
[/code]

3 楼

在实际编程中千万不要这么写,你只是写了一个COUT,暂时并没改写*F曾经使用过的栈地址,所以可能没有出错,但是如果在MAIN函数中进行别的操作的话很可能出错。切忌这么写。

我来回复

您尚未登录,请登录后再回复。点此登录或注册