我只是想通过函数(相同的内存地址)将一个指针分配给另一个指针。我的代码如下:
#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
答案 0 :(得分:8)
您的代码有三个问题:
在int* val_ptr = malloc(1);
中,您分配1个字节而不是为int
分配空间。使用以下内容对其进行修复:
int* val_ptr = malloc(1 * sizeof(int));
此a = &val_ptr;
不是您想要的。它更改了本地指针,并使其指向val_ptr
的地址。这将不影响您在main
中定义的指针。
使用
修复*a = val_ptr;
这样,main
中的指针也将反映更改,并指向malloc
编辑的内存
使用后,应free
free(a);
分配的内存。添加
printf
在main
中的gsub
之后将其释放。