Je crée une liste liée qui contient des noeuds avec le "dataItem" d'un pointeur vide. Le but de ceci est de permettre au nœud de contenir n'importe quel type de données. Cependant, je suis incapable d'accéder aux données du pointeur vide, même lorsque ces données sont castées au type correct.Impossible d'accéder au pointeur de vidage
Mon code ressemble à ceci:
#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;
}
Je sais que j'ai certainement un pointeur mal quelque part, je ne suis pas sûr comment. J'ai également le noeud dans ma fonction readData
point à une nouvelle malloc de noeud parce que je veux un nouveau noeud chaque fois que readData
est appelé quand j'implémente la liste liée plus loin.
Ici 'student * ptr = (student *) (temp.dataItem.dataPtr);' la distribution est complètement inutile. Ainsi que ici 'link = (noeud *) malloc (sizeof (noeud));'. Et ainsi de suite ... Et ce 'fflush (stdin);' est un comportement indéfini, vous ne devriez jamais 'fflush()' un flux d'entrée. Avez-vous inclus des en-têtes? et 'main()' renvoie une valeur, 'int'. –