C 从函数返回数组地址

C 从函数返回数组地址,c,arrays,function,C,Arrays,Function,我试图将数组地址从函数传递到主函数,这一切都很顺利。但是当我在main()中取消引用地址时,我得到的是垃圾值。我猜数组_地址内存中的变量只存在于函数的范围内。如果是这种情况,如何将函数中生成的数组返回给另一个函数 这是我的密码: int* letssee(int something) { int* array_address; int a[10], i=0; array_address = &a[0]; for (i; i<something;i+

我试图将数组地址从函数传递到主函数,这一切都很顺利。但是当我在main()中取消引用地址时,我得到的是垃圾值。我猜数组_地址内存中的变量只存在于函数的范围内。如果是这种情况,如何将函数中生成的数组返回给另一个函数

这是我的密码:

int* letssee(int something)
{
    int* array_address;
    int a[10], i=0;
    array_address = &a[0];

    for (i; i<something;i++)
    {
            *(array_address+i) = i;
            printf("\n%p, %d",(array_address+i), *(array_address+i));   

    }

    return array_address;

     }

int main()

{
    int i= 5,j;
    int* catch_address;
    catch_address = letssee(i);

    printf("\n");
    for (j= 0; j<i; j++)
    {
    printf("%p, %d\n", (catch_address+j),*(catch_address+j));  
    } 

    return 0;
}
int*letssee(int某物)
{
int*数组地址;
int a[10],i=0;
数组_地址=&a[0];

对于(i;i,您不能返回函数中定义的数组,因为它是在堆栈上分配的,并且在函数完成后将消失。相反,您可以分配内存

int *array_address = malloc(sizeof(int) * 10);
但是,您必须管理内存,这意味着您必须在使用完内存后“释放”内存,否则将泄漏内存

另一种方法是将预先分配的内存传递给函数(无论是通过malloc、堆栈还是全局)


如果只是将数组设为静态,实际上就是在设一个全局变量,对该函数的多次调用将返回相同的地址,如果每次调用都需要新数组,则可能会导致奇怪的行为。

返回非静态局部变量的指针或引用会导致未定义的行为,因为该变量不是在函数返回后不再有效。哦..那么我所要做的就是创建一个静态数组?然后传递它?它起作用了:D谢谢@CaptainObvliousno,不要这样做…这会导致以后的灾难。你为什么不通过new分配一个缓冲区(或者从调用方传递缓冲区)嗯..这也可以起作用。谢谢你。在C中,
int* letsee(int something, int* array_address, int count);