Allocation dynamique de la memoire, listes et pointeurs, la memoire artificielle

Soyez le premier à donner votre avis sur cette source.

Vue 7 641 fois - Téléchargée 289 fois

Description

Présentation de la mémoire artificielle et de l'allocation dynamique à travers un jeux simple (voir capture ecran) qui utilise les Listes en C++. Le code source est jeux.cpp. De plus, je propose la librairie List.h qui effectue un accès universel aux listes...

Source / Exemple :


// Librairie list.h 
void initliste (Tliste &l){ 
l.tete=NULL; 
l.ec=NULL; 
l.predec=NULL; 
} 

bool listevide(Tliste l){ 
return(l.tete= =NULL); 
} 

void entete(Tliste &l){ 
l.ec=l.tete; 
l.predec=NULL; 
} 

void suc(Tliste &l){ 
if (l.ec= =NULL){ 
//Erreur sur successeur} 
else{l.predec=l.ec;l.ec=l.ec ->s;} 
} 

void valec (Tliste l, int &val){ 
if(l.ec= =NULL){ 
//Erreur sur valeur} 
else{val=l.ec->v;} 
} 

void modifec (Tliste l, int val){ 
l.ec->v=val; 
} 

void supec (Tliste &l){ 
Telement *x; 
if(l.ec= =NULL){ 
//Erreur de supression} 
else{x=l.ec; 
        if(l.ec= =l.tete){ 
         l.tete=l.ec->s; l.ec=l.tete;} 
         else{l.predec->s=l.ec->s; l.ec=l.ec->s;} 
         }delete(x); 
} 

void ajoutg ( Tliste &l, int val){ 
Telement *x; 
if(listevide(l)){ 
x=new(Telement); 
x->v=val; 
x->s=NULL; 
l.tete=x; 
l.ec=x;} 
else if(l.ec= =NULL){//Erreur sur ajout gauche} 
else{x=new(Telement); 
       x->v=val; 
       if(l.tete= =l.ec){ 
       x->s=l.ec; 
       l.ec=x; 
       l.tete=x;} 
       else{x->s=l.ec; 
       l.predec->s=x; 
       l.ec=x;} 
     } 
} 

void ajoutd(Tliste &l, int val){ 
Telement *x; 
if(listevide(l)){ 
x=new(Telement); 
x->v=val; 
x->s=NULL; 
l.tete=x; 
l.ec=x;} 
else if(l.ec= =NULL){ 
//Erreur sur ajout droit} 
else{x=new(Telement); 
x->s=l.ec->s; 
x->v=val; 
l.ec->s=x; 
l.predec=l.ec; 
l.ec=x;} 
} 

//main.cpp 
#include <conio.h> 
#include <iostream.h> 
#include "list.h" 

typedef struct Telement{ 
int v; 
Telement *s; 
}Telement; 
typedef struct{ 
Telement *tete; 
Telement *ec; 
Telement *predec; 
}Tliste; 

int val; 
Tliste l; 

void main(){ 
initliste(l); 
do{ 
//Element a ajouter 
cin>>val; 
ajoutd(l, val);}while (val!=-1); 
entete(l); 
//Liste des elements de la liste 
while (l.ec!=NULL){ 
valec(l,val); 
printf(val); 
suc(l);} 
getch(); 
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
30 mai 2008

Tu fais un new TElement() mais ne manquerait il pas un delete ?
Messages postés
3
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
13 juin 2010

exact, avec la STl sous VC6 , il suffit de mettre les warnings en niveau 4 et ca compile sans erreurs (encore heureux) ni warnings
pour ton prog sbeuz je ne l'ai lu qu'en vitesse mais ya qqch de tres grave:
_si_ je ne m'abuse, tu ne libere jamais la mémoire.... t'as bien (tes noms de fonctions ne sont pas tres explicites je trouve) une fonction pour virer un élément mais a la fon du main ya tout qui reste en mémoire, ca pue le mem leak ca
dites moi si j'ai pas vu que, par exemple, la fonction en question est dans une boucle, j'ai pas trop le temps de m'attarder
++
Messages postés
341
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
17 juin 2008
2
avec VC6 je sais pas mais avec gcc oui et Open Watcom aussi donc je pense que c'est aussi possible avec VC6 .
Messages postés
6
Date d'inscription
mercredi 25 août 2004
Statut
Membre
Dernière intervention
23 septembre 2005

ivan : Because this code is written to have a better comprehension about List. Code Niv. 1
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
0 warning avec VC6 en mode warning 4 ???

là vs pourriez m'intéresser...
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.