Réponse acceptée !
Ca à été un peut long j'ai hu autre chose à faire entre
temps
, désolé si quelqu'un attendais apprêt ces fonction.
En final j'ai fais une liste chainer pour stocker les ards allouer (je trouvais
ca plus pratique
)
Désolé si il y à des faute d'orthographe je n'ai pas pris le temps de les corriger
.
struct StrcutMemoireAllouer
{
void * AdresseAlouer;
struct StrcutMemoireAllouer * Suivant;
};
struct StrcutMemoireAllouer * MemoireAllouer = 0;
void * MyMalloc (size_t QuantiteMemoire)
{
void * Tempon;
struct StrcutMemoireAllouer * EnCours;
Tempon = malloc(QuantiteMemoire);
if (MemoireAllouer == 0) //Si 1ér allocation
{
MemoireAllouer = (struct StrcutMemoireAllouer*)malloc(sizeof(struct StrcutMemoireAllouer)); //crée le 1ér maillon
(*MemoireAllouer).Suivant = 0; //initialise le pointeur vers suivant
(*MemoireAllouer).AdresseAlouer = Tempon; //sauvgarde l'adrs retourner
}
else //si déja des alocation présante
{
EnCours = MemoireAllouer; //pointe le 1ér maillon de la chaine
while ((*EnCours).Suivant != 0) //temps que l'on est pas à au dernier maillon
{
EnCours = (*EnCours).Suivant; //passe au maillon suivant
}
(*EnCours).Suivant = (struct StrcutMemoireAllouer*)malloc(sizeof(struct StrcutMemoireAllouer)); //aloue un nouveau maillon
(*(*EnCours).Suivant).AdresseAlouer = Tempon; //Sauvgarde l'adrs allouer à la variable
(*(*EnCours).Suivant).Suivant = 0; //marque le maillon comme étant le dernier
}
return Tempon; //renvoie l'adrs de la variable alouer
}
ErreurCode MyFree (void * AdresseALiberer)
{
struct StrcutMemoireAllouer * EnCours;
struct StrcutMemoireAllouer * Tempon;
if (MemoireAllouer == 0) //Si la chaine n'existe pas
{
free(AdresseALiberer); //Libére le mémoire passée en paramétre
return 999; //retourne un code d'erreur
}
Tempon = EnCours = MemoireAllouer; //Initialise les variable
while (AdresseALiberer != (*EnCours).AdresseAlouer) //temps que l'ards n'est pas celle du maillon en cours
{
if ((*EnCours).Suivant == 0) //si on est dans le dernier maillon
{
free(AdresseALiberer); //Libére le mémoire passée en paramétre
return 999; //retourne un code d'erreur
}
Tempon = EnCours; //on sauvgarde l'adresse de ce maillon
EnCours = (*EnCours).Suivant; //on passe au suivant
}
if (EnCours == MemoireAllouer) //si 1ér maillon de la chaine
{
if ((*MemoireAllouer).Suivant == 0) //si pas d'autre maillon
{
free(MemoireAllouer); //libére la mémoire du 1ér maillon
MemoireAllouer = 0; //marque le pointeur commme chaine inexistante
}
else //si dautre mallon
{
free(MemoireAllouer); //on libére le maillon en cours
MemoireAllouer = (*EnCours).Suivant; //Le pointeur global pointe le suivant
}
}
else //si au moin un autre maillon
{
(*Tempon).Suivant = (*EnCours).Suivant; //on ne pointe plus vers ce maillon et si le maillon en cours est le dernier alors la donnée Suivant = 0
free(EnCours); //On libére le maillon en cours
}
free(AdresseALiberer); //Libére le mémoire passée en paramétre
return 0;
}
void MyFeeeAll (void)
{
struct StrcutMemoireAllouer * EnCours;
struct StrcutMemoireAllouer * Tempon;
if (MemoireAllouer != 0) //Si la chaine existe
{
Tempon = EnCours = MemoireAllouer; //Pointe le 1ér maillon
do
{
free((*EnCours).AdresseAlouer); //Libére la mémoire alouer à une variable
EnCours = (*EnCours).Suivant; //Passe au maillon suivant
free (Tempon); //Libére le maillon présedant
Tempon = EnCours; //Passe le tempon au maillon suiant
}while ((*EnCours).Suivant != 0); //Temps que le dernier maillon n'a pas été libérer
}
}
Ce soir dans "triste monde tragique" :
Des vers qui mangent les programmeurs !
Des virus sorte des ordinateurs et attaque des gents !