如何解决结构值两次访问后发生变化
当我尝试从结构中访问age元素时(使用接受双指针的函数),第一次尝试时我只会获得正确的值。为什么会改变?指针在移动吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student {
int age;
char name[200];
} student;
int getAge(student **s){
int a = (*s)->age;
return a;
}
student *create(){
student st;
student *mp = &st;
st.age = 25;
return mp;
}
int main()
{
student *sp = create();
int myAge = getAge(&sp);
printf("I am %d\n",myAge);
int Age = getAge(&sp);
printf("Again,I am %d\n",Age);
return 0;
}
解决方法
我想我明白了问题所在。您的create()
函数在堆栈上创建一个学生,并设置mp
指向它。当create()
函数返回时(或可能在此之后的某个时间),mp
指向无处,特别是因为指向它的堆栈帧被破坏了。
请尝试使用malloc
在您的create
函数中创建学生:
student *mp = malloc(sizeof student);
或者如果这是C ++代码:
student *mp = new student;
完成操作后,请记住free
函数中的delete
(如果为C)或sp
(C ++)main
,以避免内存泄漏。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。