将双指针作为函数参数传递

时间:2018-07-20 14:45:18

标签: c pointers

我只是想通过函数(相同的内存地址)将一个指针分配给另一个指针。我的代码如下:

#include <stdio.h>

void d(int** a)
{
    int* val_ptr = malloc(1);
    *val_ptr   = 5;
    printf("%d\n", *val_ptr);

    a = &val_ptr;
}

int main()
{
    int* a = NULL;
    d(&a);
    printf("%d\n", *a);
    return 0;
}

Link的输出

5
Segmentation fault

1 个答案:

答案 0 :(得分:8)

您的代码有三个问题:

  1. int* val_ptr = malloc(1);中,您分配1个字节而不是为int分配空间。使用以下内容对其进行修复:

    int* val_ptr = malloc(1 * sizeof(int));
    
  2. a = &val_ptr;不是您想要的。它更改了本地指针,并使其指向val_ptr的地址。这将影响您在main中定义的指针。

    使用

    修复
    *a = val_ptr;
    

    这样,main中的指针也将反映更改,并指向malloc编辑的内存

  3. 使用后,应free free(a); 分配的内存。添加

    printf

    main中的gsub之后将其释放。