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

1 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;
}
Run Code Online (Sandbox Code Playgroud)

链接输出

5
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

Spi*_*rix 7

您的代码有三个问题:

  1. 在这里int* val_ptr = malloc(1);,您分配1个字节而不是为一个分配空间int.使用以下方法修复它:

    int* val_ptr = malloc(1 * sizeof(int));
    
    Run Code Online (Sandbox Code Playgroud)
  2. a = &val_ptr;不是你想要的.它改变了本地指针并使其指向地址val_ptr.这不会影响您定义的指针main.

    使用修复它

    *a = val_ptr;
    
    Run Code Online (Sandbox Code Playgroud)

    这样,指针in main也将反映更改并指向malloced内存

  3. 你应该free在使用后分配内存.加

    free(a);
    
    Run Code Online (Sandbox Code Playgroud)

    printfmain释放它.