从函数返回数组地址

时间:2014-09-22 01:46:27

标签: c arrays function

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

这是我的代码:

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;
}

1 个答案:

答案 0 :(得分:0)

您无法返回函数中定义的数组,因为它在堆栈上分配,并在函数完成后消失。而是分配内存

int *array_address = malloc(sizeof(int) * 10);

然而,你必须管理记忆,这意味着你必须&#34;免费&#34;当你完成它,否则你将泄漏记忆

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

int* letsee(int something, int* array_address, int count);

如果您只是将数组设为静态,那么您实际上是在创建一个全局变量,对函数的多次调用将返回SAME地址,如果您希望每次调用都有新数组,则可能会导致奇怪的行为。