Chinaunix首页 | 论坛 | 博客
  • 博客访问: 535181
  • 博文数量: 181
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1498
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-22 15:17
个人简介

用发呆的时间来理清自己的思绪

文章存档

2015年(7)

2014年(134)

2013年(40)

分类: C/C++

2014-06-06 23:18:03


点击(此处)折叠或打开

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

  3. struct st
  4. {
  5.     int a;
  6.     char b;
  7.     short c;
  8. };

  9. struct st *test()
  10. {
  11.     struct st *p = (struct st *)malloc(sizeof(struct st));
  12.     //p 在栈区分配空间,p指向了堆区一段连续空间
  13.     struct st s;
  14.     //s 在栈区分配的空间
  15.     struct st *q = (struct st *)malloc(sizeof(q));
  16.     /*q->b,q->c;*/


  17.     return p;//函数返回之后,栈区变量p的空间释放,但p指向的堆区内存仍然可使用没有释放
  18.     /*return &s;*/   //返回栈区变量的地址无意义
  19. }

  20. int main()
  21. {
  22.     struct st *p = NULL;

  23.     p = test();

  24.     printf("p = %p\n",p);
  25.     free(p);//free释放的是一段连续的堆区内存空间,而不是栈区变量p的空间,p的值也不会改变,注意:申请和释放可能
  26.             //不在同一个函数中,只要能完成堆区申请的内层即可。
  27.     printf("p = %p\n",p);
  28.     p = NULL;

  29.      

  30.     return 0;
  31. }

阅读(619) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~