点击(此处)折叠或打开
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
struct st
-
{
-
int a;
-
char b;
-
short c;
-
};
-
-
struct st *test()
-
{
-
struct st *p = (struct st *)malloc(sizeof(struct st));
-
//p 在栈区分配空间,p指向了堆区一段连续空间
-
struct st s;
-
//s 在栈区分配的空间
-
struct st *q = (struct st *)malloc(sizeof(q));
-
/*q->b,q->c;*/
-
-
-
return p;//函数返回之后,栈区变量p的空间释放,但p指向的堆区内存仍然可使用没有释放
-
/*return &s;*/ //返回栈区变量的地址无意义
-
}
-
-
int main()
-
{
-
struct st *p = NULL;
-
-
p = test();
-
-
printf("p = %p\n",p);
-
free(p);//free释放的是一段连续的堆区内存空间,而不是栈区变量p的空间,p的值也不会改变,注意:申请和释放可能
-
//不在同一个函数中,只要能完成堆区申请的内层即可。
-
printf("p = %p\n",p);
-
p = NULL;
-
-
-
-
return 0;
- }