This question already has answers here:
How to access a local variable from a different function using pointers?
                                
                                    (9个答案)
                                
                        
                                2年前关闭。
            
                    
#include <stdio.h>

int foo1(void)
{
    int p;
    p = 99;
    return p;
}

char *foo2(void)
{
    char buffer[] = "test_123";
    return buffer;
}

int *foo3(void)
{
    int t[3] = {1,2,3};
    return t;
}

int main(void)
{
    int *p;
    char *s;

    printf("foo1: %d\n", foo1());
    printf("foo2: %s\n", foo2());
    printf("foo3: %d, %d, %d\n", p[0], p[1], p[2]);
    return 0;
}


当我使用gcc -ansi -pedantic -W -Wall进行编译时,编译器会发出foo2()和foo3()的警告消息:

warning: function returns address of local variable


我认为不允许返回局部变量,但是foo1()可以正常工作,并且似乎返回指向局部对象的指针与对象本身之间存在巨大差异。

有人可以阐明这个问题吗?提前致谢!

最佳答案

这里的问题是,当您创建局部变量时,它会分配在堆栈上,因此一旦函数完成执行就不可用(实现在此处有所不同)。最好的方法是使用malloc()保留非本地内存。这里的危险是必须取消分配(free())使用malloc()分配的所有内容,并且如果忘记了,则会造成内存泄漏。

关于c - 从C函数返回局部变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29476097/

10-13 07:05