注册 登录
编程论坛 C++教室

函数返回指针为局部变量的问题,谁教我一招吧

crazycoder 发布于 2008-11-23 16:49, 1401 次点击
// 以如下程序为例:
#include <iostream>
using namespace std;
const int array_size = 10;

int * f()
{
    int A[array_size];
    for(int i = 0; i < array_size; i++)
    {
        A[i] = i * 10;
    }
    return A;
}

int main()
{
    int *p = f();
    cout << p[array_size - 1] << endl;

    return 0;
}

编译时只是有一个警告:“warning C4172: returning address of local variable or temporary”
输出结果是90,不是应该出错才对吗? 为什么局部变量也能返回? 局部变量是什么时候释放的?谢谢。。
4 回复
#2
debroa7232008-11-23 18:58
int * f()
{
    int* A = new int[array_size];
    for(int i = 0; i < array_size; i++)
    {
        A[i] = i * 10;
    }
    return A;
}

int main()
{
    int *p = f();
    cout << p[array_size - 1] << endl;

    if(p!=NULL) delete [] p ;
    return 0;
}

局部变量的地址是可以返回的,但不安全,不安全的内存空间,在作用域外可能被其它的局部变量覆盖.
#3
asd67918682008-11-23 19:14
int *p = f();
这样对么??
int (*p)()=&f();
#4
crazycoder2008-11-23 19:55
感谢版主debroa723喽
#5
crazycoder2008-11-23 20:01
对于3楼的问题,p不是一个指向函数的指针,它是一个指向int型变量的指针。调用上面程序里的f()函数,会返回一个int型的指针,把这个指针赋给p。
1