gpt4 book ai didi

c - 用 malloc 分配的内存不会在函数范围之外持续存在?

转载 作者:太空狗 更新时间:2023-10-29 16:36:48 25 4
gpt4 key购买 nike

你好,

我对 C 的 malloc 函数有点陌生,但据我所知,它应该将值存储在堆中,因此您可以使用原始范围之外的指针引用它。我创建了一个应该执行此操作的测试程序,但在运行该程序后我一直得到值 0。我做错了什么?

#include <stdio.h>
#include <stdlib.h>

int f1(int *b) {
b = malloc(sizeof(int));
*b = 5;
}

int main(void) {
int *a;
f1(a);
printf("%d\n", a);
return 0;
}

最佳答案

是的! a按值传递,因此函数 f1 中的指针 b 将是本地指针。返回 b,

int *f1() {
int * b = malloc(sizeof(int));
*b = 5;
return b;
}

int main() {
int * a;
a = f1();
printf("%d\n", *a);
// keep it clean :
free(a);
return 0;
}

或者传递a的地址

int f1(int ** b) {
*b = malloc(sizeof(int));
**b = 5;
}

int main() {
int * a;
f1(&a);
printf("%d\n", *a);
// keep it clean :
free(a);
return 0;
}

关于c - 用 malloc 分配的内存不会在函数范围之外持续存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2513218/

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