对分配内存函数的思考,高手请进!!!!!

来源:百度知道 编辑:UC知道 时间:2024/07/07 13:30:46
#include<stdio.h>
#include<malloc.h>
main()
{
struct stu
{
int num;
char *name;
} *p;
p=(struct stu*)malloc(sizeof(struct stu));
p->num=102;
p->name="zhangwenchao";
printf("%d %s",p->num,p->name);
free(p);
scanf("%d",&p->num);
printf("%d",p->num);
}这是一段分配内存的程序,在vc中能够编译成功和运行,但我认为在执行
free(p);之后scanf("%d",&p->num);
printf("%d",p->num);是不能执行的,但事实恰恰相反,我认为内存
空间已经被释放,scanf("%d",&p->num);
printf("%d",p->num);也就没有执行目标了,请各位老大指教这是
为什么??????????????????????

struct stu
{
int num;
char *name;
} *p;
关键是,这个结构里的name只是个指针(这么定义有问题的)。
其次,
p->name="zhangwenchao";
怎么也得strcpy吧。。。这里把name指针指向main()的栈上,在main()返回前,这个指针值一直有效。
free(p)不过是释放struct stu。。。