c - 将双指针作为函数参数传递
问题描述
我只是想通过函数(相同的内存地址)将一个指针分配给另一个指针。我的代码如下:
#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
解决方案
您的代码存在三个问题:
在这里
int* val_ptr = malloc(1);
,您分配 1 个字节而不是为int
. 使用以下方法修复它:int* val_ptr = malloc(1 * sizeof(int));
这
a = &val_ptr;
不是你想要的。它更改本地指针并使其指向val_ptr
. 这不会影响您在 中定义的指针main
。修复它使用
*a = val_ptr;
这样,指针 in
main
也会反映变化,并指向malloc
ed 内存您应该
free
在使用后分配内存。添加free(a);
在释放它之后
printf
。main
推荐阅读
- c# - NUnit - 任务中的 SqlConnection 超时
- android - 图片库 ViewGroup onClick
- python - API 未返回正确信息
- c++ - 词法作用域如何在没有闭包的情况下在 C++ 中工作?
- javascript - 如何将 ariable 传递给回调函数?
- python - 当存在多个同名的应用程序时,如何强制 cygwin 运行特定的应用程序?
- c - 反汇编的手臂代码似乎有一个错误
- .net - 在 Angular 或 React 应用程序中嵌入客户端 blazor
- javascript - 使用 React StyleSheet 对象创建方法,使其起作用&是否有必须键入的特定方法来解决 TypeError?
- chart.js - 始终启用工具提示:图表 JS:V3:气泡图:react-chartjs-2