例1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable:4996)
struct student
{
char name[20]; //没有在内存里,只是在代码中,必须要定义变量之后才进内存
int age;
};
struct man
{
char *name;
int age;
};
int main ()
{
struct student st ; // st.name 是在堆里还是在栈里? 在栈里
struct student *p = malloc(sizeof(struct student)); // p->name 是在堆里面还是在栈里面? 在堆里
free(p);
struct man *p1 = malloc(sizeof(struct man)); //申请一个堆空间, p->name 在堆里,但是是一个野指针
p1->name = malloc(20);
strcpy(p1->name, "刘德华");
p1-> age =20;
printf("%s, %d\n", p1->name, p1-> age);
free(p1->name);
free(p1);
//free(p1->name);//name在堆中已经被释放掉了,因此要放到 free(p1);前面
return 0;
}
输出结果: