使用malloc分配的内存不会保留在函数范围之外?

前端之家收集整理的这篇文章主要介绍了使用malloc分配的内存不会保留在函数范围之外?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
嗨,

我对C的malloc函数有点新鲜,但是从我所知道的,它应该将值存储在堆中,所以你可以用原始范围之外的指针来引用它.我创建了一个应该这样做的测试程序,但是在运行程序后,我仍然得到值0.我究竟做错了什么?

  1. int f1(int * b) {
  2. b = malloc(sizeof(int));
  3. *b = 5;
  4. }
  5.  
  6. int main() {
  7. int * a;
  8. f1(a);
  9. printf("%d\n",a);
  10. return 0;
  11. }

解决方法

是! a通过值传递,因此函数f1中的指针b将是本地的.
要么返回b,
  1. int *f1() {
  2. int * b = malloc(sizeof(int));
  3. *b = 5;
  4. return b;
  5. }
  6.  
  7. int main() {
  8. int * a;
  9. a = f1();
  10. printf("%d\n",*a);
  11. // keep it clean :
  12. free(a);
  13. return 0;
  14. }

或传递地址

  1. int f1(int ** b) {
  2. *b = malloc(sizeof(int));
  3. **b = 5;
  4. }
  5.  
  6. int main() {
  7. int * a;
  8. f1(&a);
  9. printf("%d\n",*a);
  10. // keep it clean :
  11. free(a);
  12. return 0;
  13. }

猜你在找的C&C++相关文章