Я создаю связанный список, содержащий узлы с «dataItem» указателя пустоты. Цель этого заключается в том, чтобы Узел мог содержать любые данные. Тем не менее, я не могу получить доступ к данным указателя void, даже когда эти данные выдаются на правильный тип.Невозможно получить доступ к литой указателю пустоты
Мой код выглядит следующим образом:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student
{
char stuName[51];
char stuMajor[5];
double GPA;
char stuID[10];
}student;
typedef struct Node
{
union{
void *dataPtr;
int countr;
}dataItem;
int link;
struct Node* next;
}node;
void readData(struct Node *);
void main(){
node head;
node temp;
readData(&temp);
student *ptr = (student *)(temp.dataItem.dataPtr);
printf("%s %d", ptr->stuName, ptr->GPA);//breaks here because unable to access memory
}
void readData(struct Node *link)
{
link = (node *)malloc(sizeof(node));
student *ptr = (student *)malloc(sizeof(struct Student));
printf("enter the student name : ");
fflush(stdin);
scanf("%[^\n]", ptr->stuName);
printf("enter the student's major : ");
fflush(stdin);
scanf("%[^\n]", ptr->stuMajor);
printf("enter the student GPA : ");
scanf("%lf", &(ptr->GPA));
printf("enter the student ID : ");
fflush(stdin);
scanf("%[^\n]", ptr->stuID);
link->dataItem.dataPtr = ptr;
}
Я знаю, что у меня определенно есть указатель неправильно где-то я не уверен, как. У меня также есть узел в моей функциональной точке readData
на новый malloc узла, потому что я хочу новый узел каждый раз, когда вызывается readData
, когда я реализую связанный список дальше.
Здесь 'student * ptr = (student *) (temp.dataItem.dataPtr);' cast совершенно не нужно. Также здесь 'link = (node *) malloc (sizeof (node));'. И так далее ... И этот 'fflush (stdin);' является неопределенным поведением, вы никогда не должны 'fflush()' входного потока. Вы включили какие-либо заголовки? и 'main()' возвращает значение 'int'. –