免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: ifosn
打印 上一主题 下一主题

[函数] 基础的free问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-09-24 16:21 |只看该作者
malloc利用返回地址前8个字节存储内存管理结构,你可以debug看一下

  1. int main()
  2. {
  3.         char *pStr1, *pStr2, *pStr3;

  4.         pStr1 = (char *)malloc(sizeof(char) * 1024);
  5.         pStr2 = (char *)malloc(sizeof(char) * 1024);
  6.         pStr3 = (char *)malloc(sizeof(char) * 1024);
  7.         memset(pStr1, 'A', 1024);
  8.         memset(pStr2, 'B', 1024);
  9.         memset(pStr3, 'C', 1024);
  10.         free(pStr1);
  11.         free(pStr2);
  12.         free(pStr3);
  13.         return 0;
  14. }
复制代码

结果如下所示:

  1. (gdb) p /x pStr1
  2. $1 = 0x9c60008
  3. (gdb) p /x pStr2
  4. $2 = 0x9c60410
  5. (gdb) p /x pStr3
  6. $3 = 0x9c60818
  7. (gdb) p *(pStr2)
  8. $4 = 66 'B'
  9. (gdb) p *(pStr2 - 1)
  10. $5 = 0 '\0'
  11. (gdb) p *(pStr2 - 2)
  12. $6 = 0 '\0'
  13. (gdb) p *(pStr2 - 3)
  14. $7 = 4 '\004'
  15. (gdb) p *(pStr2 - 4)
  16. $8 = 9 '\t'
  17. (gdb) p *(pStr2 - 5)
  18. $9 = 0 '\0'
  19. (gdb) p *(pStr2 - 6)
  20. $10 = 0 '\0'
  21. (gdb) p *(pStr2 - 7)
  22. $11 = 0 '\0'
  23. (gdb) p *(pStr2 - 8)
  24. $12 = 0 '\0'
  25. (gdb) p *(pStr2 - 9)
  26. $13 = 65 'A'
复制代码

很明显
pStr2 - pStr1 = 1024 + 8
pStr3 - pStr2 = 1024 + 8

论坛徽章:
0
12 [报告]
发表于 2008-09-24 18:54 |只看该作者
当然是1000个了,这个由malloc知道
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP