gpt4 book ai didi

c - 传递双指针作为函数参数

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:38 25 4
gpt4 key购买 nike

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

#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. 此处 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 中的指针也将反射(reflect)更改并指向malloced 内存

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

    free(a);

    main 中的 printf 之后释放它。

关于c - 传递双指针作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51445088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com