如何在函数中动态分配数组?

时间:2019-05-05 15:32:38

标签: c dynamic-memory-allocation

我试图动态分配通过函数dynamic_allocation_array中的参数传递的数组,但我不明白为什么它不起作用。

#include <stdio.h>
#include <stdlib.h>
void dynamic_allocation_array(int **a, int n){

    (*a) = (int *)malloc(n * sizeof(int *));
    for(int i = 0; i < n; i++){
        scanf("%d", *(a + i));
    }

}
int main()
{
    int n, *a;
    scanf("%d", &n);
    dynamic_allocation_array(&a, n);
    for(int i = 0; i < n; i++){
        printf("%d ", a[i]);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:3)

*(a + i)无效。您首先要*解除对a指针的引用,然后添加+ ia指向某个变量,a + i处没有变量。您在(*a) + i处分配了内存。

您还希望为nint个计数分配内存,而不是为n的{​​{1}}个指针分配内存。您需要:int

使用临时变量,不要使用malloc(n * sizeof(int)),而要使用*(a + b)表示法,

a[b]

或者您可以:

void dynamic_allocation_array(int **a, int n) {
    int *tmp = malloc(n * sizeof(int));
    for(int i = 0; i < n; i++){
        scanf("%d", &tmp[i]);
    }

    *a = tmp;
}

或者您可以:

void dynamic_allocation_array(int **a, int n) {
    *a = malloc(n * sizeof(int));
    for(int i = 0; i < n; i++){
        scanf("%d", &(*a)[i]);
    }
}

答案 1 :(得分:2)

我不会使用任何双指针,因为这里不需要100%

int *dynamic_allocation_array(size_t size)
{
      int *a = malloc(size * sizeof(*a));
       /* another code */
      return a;
}

和调用函数中

int *a = dynamic_allocation_array(some_size);