嗨,
我对C的malloc函数有点新鲜,但是从我所知道的,它应该将值存储在堆中,所以你可以用原始范围之外的指针来引用它.我创建了一个应该这样做的测试程序,但是在运行程序后,我仍然得到值0.我究竟做错了什么?
- int f1(int * b) {
- b = malloc(sizeof(int));
- *b = 5;
- }
- int main() {
- int * a;
- f1(a);
- printf("%d\n",a);
- return 0;
- }
解决方法
是! a通过值传递,因此函数f1中的指针b将是本地的.
要么返回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;
- }
或传递地址
- 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;
- }