Hey! Je sais que le titre de la question est très effrayant mais je ne suis toujours pas en mesure d'exprimer le problème en une seule ligne!Libérer de la mémoire en utilisant free() whoes pointeur est à l'intérieur d'un pointeur pointant vers la structure
Voici donc je vais:
Il y a un pointeur de données dire DataPtr qui pointe vers une mémoire allouée dynamiquement et une autre structure pointeur dire StructPtr qui pointe également à une structure allouée dynamiquement.
Et Ces deux sont dans une autre structure, disons OuterStructure.
Il existe une liste liée contenant un pointeur vers une structure externe.
struct StructONE
{
int a;
char b;
float c;
};
struct InnerStruct
{
char a;
int b;
};
struct StructTWO
{
int Num;
char * DataPtr;
struct InnerStruct * StructPtr;
};
struct LinkList
{
int NodeNum;
int NodeType; /* To Indicate Whether Pointer is of StructOne or StructTwo */
void * Ptr; /* This can be of type StructONE or StructTWO */
struct LinkList * Next;
};
LinkList * Start;
void main()
{
/* Structure Declarations */
InnerStruct * InnerStructure;
StructONE * OneStruct;
StructTWO * TwoStruct;
/* Fill up all the Structure */
InnerStructure= (InnerStruct *)calloc(100,sizeof(InnerStruct));
InnerStructure->a='a';
InnerStructure->b=5;
OneStruct= (StructONE *)calloc(100,sizeof(StructONE));
TwoStruct= (StructTWO *)calloc(100,sizeof(StructTWO));
TwoStruct->Dataptr=(char *) calloc(10,sizeof(char));
TwoStruct->StructPtr= InnerStructure;
/* Add these to Linked List
void Add_to_Linked_List(int NodeNum,int NodeType,void *ptr)
*/
Add_to_Linked_List(1,1,OneStruct);
Add_to_Linked_List(2,2,TwoStruct);
/* Everything is Okey Till Here.
Now When I want to delete a node from linked list,
First I have to release Memory pointed by DataPtr and StructPtr. */
DeleteNode(1);
} /* End of Main */
Le code pour DeleteNode est comme ceci:
Que dois-je faire ??
Je sais que j'ai écrit du code terriblement ... mais je dois écrire ce complexe beaucoup !! :(
Merci d'avoir lu aussi bien !!
Ceci est aussi un excellent moyen !! Merci Rosh !! – Swanand