我只想通过函数(相同的内存地址)分配指向另一个指针的指针.我的代码如下:
#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)
您的代码有三个问题:
在这里int* val_ptr = malloc(1);
,您分配1个字节而不是为一个分配空间int
.使用以下方法修复它:
int* val_ptr = malloc(1 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)这a = &val_ptr;
不是你想要的.它改变了本地指针并使其指向地址val_ptr
.这不会影响您定义的指针main
.
使用修复它
*a = val_ptr;
Run Code Online (Sandbox Code Playgroud)
这样,指针in main
也将反映更改并指向malloc
ed内存
你应该free
在使用后分配内存.加
free(a);
Run Code Online (Sandbox Code Playgroud)
后printf
在main
释放它.