小笑孩 发布留言 2008-9-8 14:52 有谁可以解释一下下面代码的结果为什么是那样的呢?老师说跟 堆 栈 有关 #include #include typedef struct student{ int number; //学号 int age; //年龄 } student; student * getStudent(){ student stu; stu.age = 100; //年龄默认初始为岁 stu.number = 100; //学号默认初始为号 return &stu; }
结果是:student 100 is 100. student 4241459 is 4325404. 为什么第二个是那样的呢??? void main(){ student * ptr = getStudent(); int age = ptr->age, number = ptr->number; printf("student %d is %d .\n",number,age); age = ptr->age, number = ptr->number; printf("student %d is %d .\n",number, age); }csynyk 发布留言 2008-9-8 14:57 你是不是在csdn上问过相同的问题阿?我记得给你解释过了!小笑孩 发布留言 2008-9-8 15:02 没,我是第一次,可能是我同学吧,可以把那个地址给我吗?我看一下你的解释csynyk 发布留言 2008-9-8 15:03 student * getStudent() { student stu; //这是一个局部变量,在栈内! stu.age = 100; stu.number = 100; return &stu; //函数退出运行stu的栈空间就被释放了,后面一旦有调用栈空间的代码运行,里面的内容马上就被改写了。 }csynyk 发布留言 2008-9-8 15:06 改正过来: student * getStudent() { student *stu=(student *)malloc(sizeof(student)); stu->age = 100; stu->number = 100; return stu; } //分配的这个堆上空间如果不用了记得要释放,否则会一直保留在那里占用空间小笑孩 发布留言 2008-9-8 15:14 是不是释放后,在运行原来的那段代码,结果都是随机的呢?
页: [1] 特别说明:如网页特效代码中有引用图片文件等,请自己下载到本地调试! |