Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ALLOCATION DYNAMIQUE DE LA MEMOIRE, LISTES ET POINTEURS, LA MEMOIRE ARTIFICIELLE


Information sur la source

Description

Cliquez pour voir la capture en taille normale
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

  • // 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();
  • }
// 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(); 
}

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de ivanmari le 22/09/2005 19:26:29

Pour qui est'ce que vous utilisez la Librairie list.h from C instead of <list> from the STL that is better in C++ ?

Ivan

signaler à un administrateur
Commentaire de magic_Nono le 23/09/2005 01:32:25

Ivan : employer les stl implique différentes choses

nottamment la levé d'un nombre incommensurable de warning

ce qui est innacceptable lors d'une volontée de projet
0 error 0 warning.

voila une des raison qui m'a poussé avec quelques amis a développer un ensemble de bibliothèque (portable sauf pour la section graphique) dont vous avez certainement entendu parler dans ces pages : les Bxxx

Magicalement
Nono.

signaler à un administrateur
Commentaire de Pamaury le 23/09/2005 16:57:59

je ne suis pas d'accord: il y a warning si les types sont mal utilisés mais la stl en elle-même peut-être utilisée avec
0 errors 0 warnings
et çà je peux te l'assurer puisque c'est précisement ce que je fais à chaque fois que je l'utilise .

signaler à un administrateur
Commentaire de Taron31 le 23/09/2005 18:49:12

Sbeuz : moi aussi j'ai implementé une classe List pour débutant tu peux aussi jeter un oeil si ça t'interesse... bye

signaler à un administrateur
Commentaire de magic_Nono le 23/09/2005 19:32:11

0 warning avec VC6 en mode warning 4 ???

là vs pourriez m'intéresser...

signaler à un administrateur
Commentaire de sbeuz le 23/09/2005 22:32:57

ivan : Because this code is written to have a better comprehension about List. Code Niv. 1

signaler à un administrateur
Commentaire de Pamaury le 25/09/2005 20:01:57

avec VC6 je sais pas mais avec gcc oui et Open Watcom aussi donc je pense que c'est aussi possible avec VC6 .

signaler à un administrateur
Commentaire de Arnaud1602 le 30/09/2005 11:36:26

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
++

signaler à un administrateur
Commentaire de Flothi27 le 18/05/2006 10:50:14

Tu fais un new TElement() mais ne manquerait il pas un delete ?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Allocation dynamique de mémoire (°_°) [ par ceeno ] Bonjour à tous,Je cherche a crée un tableau dont j'augmente la mémoire à chaque fois que je veu y enregistrer une nouvelle valeur.Mais je n'y arrive p Exception et Allocation Mémoire [ par magic_Nono ] Bonjour,G réalisé une classe pour gérer mes exception.http://www.cppfrance.com/code.aspx?ID=19671Cette classe comporte une chaine de caractère...Mais prd de fuite mémoire. [ par gyzmo1 ] Salut à tous, dans mon programme je dois utiliser beaucoup de matrice et donc pas mal d'allocation dynamique. Je desalloue regulièrement mes tableaux( Probleme d'allocation de mémoire dynamique (malloc/free) [ par PhantomPowaa ] Bonjour,J'ai un petit probleme avec les fonctions malloc et free dans certains de mes programmes. Apparement le malloc s'effectue correctement, mais a Allocation méoire [ par pac2 ] Salut,Dans un de mes programmes je déclare des tableaux de nombres à double précision à 3 dimensions. Je déclare en fait 6 tableaux "double tab[30][30 Question sur l'allocation de mémoire... [ par kod32 ] Salut,j'ai une question concernant l'allocation de mémoire et notamment l'utilisation de la fonction malloc. Cette fonction permet de pointer vers un allocation dynamique [ par hobbes ] Bonjour,Mon probleme est que je ne connais pas a l avance la taille du tableau que je souhaite cree. Je pensais alors :creer un tab de maniere dynamiq allocation dynamique [ par none77 ] Bonjour,j'ai un petit prog dans lequel j'utilise deux tablo dynamiques (j'utilise malloc() )A la fin je dois donc faire des free().Mon pb est ke lorsq allocation dynamique d'un tableau à trois dimensions [ par yo62 ] Bonjour,J'ai un bête pointeur dans une structure :int *Tableau;et je voudrais que ce pointeur pointe sur une allocation dynamique de type tableau mais allocation dynamique [ par JediMaster ] je veux crée une variable dynamiqueje fait donc un pointeur et tous marche bien sauf que quelque chose me chifone voila mon codeint* variable = NULL;v


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.