鱼C论坛

 找回密码
 立即注册
查看: 2596|回复: 3

关于malloc()动态分配内存的释放

[复制链接]
发表于 2012-5-29 20:43:07 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 O_o渐渐沉淀 于 2012-5-30 11:38 编辑
  1. /*有几个个问题不解,不解之处,用注释标在代码只好,还请前辈们指点迷津,(越详细越好),谢谢了!*/
  2. #include<stdio.h>
  3. #include<malloc.h>

  4. int* Max(int *Array, int Total)
  5. {
  6. int i;
  7. int *Max = Array;

  8. for(i = 0; i < Total; i++)
  9. {
  10. if(*Max < *Array)
  11. {
  12. Max = Array;
  13. }
  14. Array++;
  15. }
  16. return (Max); /*1.指针Max, Array需要用free()释放吗,此时Max作为函数的返回值又该在哪释放?*/
  17. }

  18. int main()
  19. {
  20. int Size;
  21. int *Head;
  22. int i;
  23. int *MaxAd;

  24. scanf("%d", &Size);
  25. Head = (int*)malloc(Size);/* 2.如果将Head指针赋值给其他的(int*),如后有:int *test = Head; 那么指针test需要用free()函数释放吗? */
  26. {
  27. if(NULL == Head)
  28. {
  29. printf("Fail to allocate memory!\n");
  30. return 1;
  31. }
  32. }
  33. for(i = 0; i < Size; i++)
  34. {
  35. scanf("%d", &Head[i]);
  36. }
  37. MaxAd = Max(Head, Size);
  38. printf("The Max = %d\n", *MaxAd);
  39. free(Head); /* 3.当将此行代码注释掉时,程序不再报错,不知问题在何处 */
  40. Head = NULL;
  41. return 0;

  42. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-29 22:30:30 | 显示全部楼层
第一个问题,Max, Array不需要用释放,用malloc()分配的堆才需要释放。
第二个问题,Head指针赋值给test时,这两个指针就指向同一堆,要释放这个堆,
只要释放其中的一个指针就可以了,但是不能重复释放哦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-30 02:08:07 | 显示全部楼层
指向malloc()分出来的内存的指针,最后记得释放指向它的指针(虽然程序关掉之后自己释放),就算有一个百指针的值的地址都是同一个malloc分出来的内存地址,只要释放一个就得,不过释放后就不要解引其他之前指向的指针,除非其他明确改变指向其他地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-30 11:33:59 | 显示全部楼层
谢谢大家的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 16:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表