как свободно памяти происходит в этом случае? - PullRequest
0 голосов
/ 03 мая 2010
#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 ]

1 голос
/ 03 мая 2010

Вы не передаете массив, вы только передаете указатель на int. Линия

void func(int arr[],int xNumOfElem)

это просто другой способ написать

void func(int* arr,int xNumOfElem)

сам компилятор не может выделить память для копии а, поскольку размер а является динамическим и поэтому неизвестен компилятору выведите значения a после вызова func, чтобы увидеть, что 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);
}
0 голосов
/ 03 мая 2010

Думайте об этом так:

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");
}
0 голосов
/ 03 мая 2010

Нет необходимости выделять память для массива arr в функции fun. Память для массива выделяется в функции main до вызова fun. Также main освобождает память, как только это сделано, используя память; так что fun также не нужно делать освобождение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...