Я создал структуру в заголовочном файле для хранения информации об ученике. Я инициализирую эти переменные-члены в функции с именем createStudent (). Функция createStudent () возвращает указатель на недавно инициализированного студента. Теперь, когда я проверяю, что все это работает, я получаю неожиданные результаты.
Код компилируется и запускается, однако только первый доступ к информации об учениках возвращает полезные значения. В приведенном ниже коде я сначала распечатываю возраст учащихся и получаю правильный возраст, но значения gpa и num являются значениями мусора. Однако, если я закомментирую оператор печати для возраста учащихся, значение gpa будет правильным, а значение num по-прежнему будет мусором. Кажется, что только первый доступ возвращает глупые значения. Теперь я совершенно уверен, что это проблема, связанная с моими указателями и распределением памяти, я просто не знаю, в чем проблема.
Сначала я думал, что память освобождается после первого доступа (я не знаю, почему это произошло, но то, что, казалось, происходило). Поэтому я попытался использовать malloc, чтобы обеспечить постоянную доступность памяти для хранения информации об учениках, но результаты не изменились.
Я также пытался переназначить возраст в функции createStudent () после того, как gpa и num были назначены, но возраст все еще получает исправленное значение, а gpa и num имеют значения мусора.
Если вам, ребята, нужна дополнительная информация, пожалуйста, дайте мне знать.
Заголовочный файл:
typedef struct Students{
int num; //holds the students number
char name[256]; //holds the students name
int age; //holds the students age
int gpa; //holds the students grade point average
}Student;
Student * createStudent();
Файл реализации:
Student * createStudent(){
Student newStud;
Student *studPtr;
newStud.age = 10;
newStud.gpa = 5;
newStud.num = 307234;
studPtr = &newStud;
return studPtr;
}
Основной файл:
int main(int argc, char *argv[]){
int retCode = 0;
Student *stdPtr = createStudent();
printf("The students age is: %d\n", stdPtr->age);
printf("The students gpa is: %d\n", stdPtr->gpa);
printf("The students number is: %d\n", stdPtr->num);
return retCode;
}