首页 > 解决方案 > 将双指针作为函数参数传递

问题描述

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

#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;
}

链接输出

5
Segmentation fault

标签: cpointers

解决方案


您的代码存在三个问题:

  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;
    

    这样,指针 inmain也会反映变化,并指向malloced 内存

  3. 您应该free在使用后分配内存。添加

    free(a);
    

    在释放它之后printfmain


推荐阅读