在这种情况下如何释放内存?

时间:2010-05-03 06:27:22

标签: c memory

#include <stdio.h>
void func(int arr[],int xNumOfElem)
{
    int j;
    for(j=0; j<xNumOfElem; j++)
    {
       arr[j] = j + arr[j];
       printf("%d\t",arr[j]);
    }
    printf("\n");
}

int main()
{

    int *a,k;
    a = (int*) malloc(sizeof(int)*10);


    for(k = 0; k<10; k++)
    {
        a[k] = k;
        printf("%d\t",a[k]);
    }
    printf("\n");

    func(a,10); //Func call

    free(a);                                                                                                                              
}

在函数“func”中为动态数组“arr”分配/释放内存。

arr是一个函数参数。

3 个答案:

答案 0 :(得分:1)

您不传递数组,只将指针传递给int。这条线

void func(int arr[],int xNumOfElem)

只是另一种写作方式

void func(int* arr,int xNumOfElem)

编译器本身不能为a的副本分配内存,因为a的大小是动态的,因此编译器不知道。在调用func之后打印a的值以查看a已更改。

要获取副本,请将您的func方法更改为:

void func(int const* const b,int xNumOfElem)
{
    int* arr = malloc(sizeof(int)*xNumOfElem);
    memcpy(b,arr,xNumOfElem);
    int j;
    for(j=0; j<xNumOfElem; j++)
    {
       arr[j] = j + arr[j];
       printf("%d\t",arr[j]);
    }
    printf("\n");
    free(arr);
}

答案 1 :(得分:0)

不需要在函数arr中为数组fun分配内存。在调用main之前,数组的内存在fun函数中分配。同样main在使用内存完成后释放内存;所以fun也不需要解除分配。

答案 2 :(得分:0)

这样想:

void func(int arr[],int xNumOfElem)
{
    int j;
    for(j=0; j<xNumOfElem; j++)
    {
       arr[j] = j + arr[j];
       printf("%d\t",arr[j]);
    }
    printf("\n");
}

相当于:

void func(int *arr /* look here */,int xNumOfElem)
{
    int j;
    for(j=0; j<xNumOfElem; j++)
    {
       arr[j] = j + arr[j];
       printf("%d\t",arr[j]);
    }
    printf("\n");
}