begin process at 2012 05 27 18:32:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > MACROS DE GESTION DE MEMOIRE [C/C++]

MACROS DE GESTION DE MEMOIRE [C/C++]


 Information sur la source

Note :
6 / 10 - par 3 personnes
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Niveau :Débutant Date de création :17/12/2003 Date de mise à jour :28/10/2004 16:01:13 Vu :3 627

Auteur : magic_Nono

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

quelques macros très très pratiques...

en C/C++,
Il faut faire de la Programmations haut niveau pour pouvoir développer de grds projets

et toutes les trois lignes on ne doit pas se soucier de la gestion mémoire....

cf le fichier...


Source

  • #ifndef MACROS_DE_GESTION_MEMOIRE_HPP
  • #define MACROS_DE_GESTION_MEMOIRE_HPP
  • //PB1(msg) affiche un msg d'err et sort ou lève une exception -1
  • //PB2(msg,nb) affiche un msg d'err et sort ou lève une exception nb
  • //Considérez pour pour l'instant... (les DLL arrivent bientot...)
  • #define PB1(txt) {exit(-1);}
  • #define PB2(txt,numException) {puts(txt);exit(numException);}
  • #ifdef MACROS_DE_GESTION_MEMOIRE
  • #ifndef MACROS_DE_GESTION_MEMOIRE_HPP
  • #define MACROS_DE_GESTION_MEMOIRE_HPP
  • ///pour les allocations
  • // allocation dynamiques - faire FREE apres utilisation
  • // exemples :ALLOUE(t,TableEntiere_); - // ALLOUEn(text,char,25);
  • // nota, vu que svt y a des erreurs, rajouter la taille d'un car de terminaison!!!
  • #include <malloc.h>
  • //pour enlever des bugs de Visual...
  • #define FREE(ptr) do{if(ptr!=NULL)free(ptr);ptr=NULL;}while(0)
  • #define BDELETE(ptr) do{if((ptr)!=NULL){delete(ptr);(ptr)=NULL;}}while(0)
  • //#define MALLOC(type) ((type *)malloc((size_t)(sizeof(type))))
  • //#define MALLOCn(type,nb) ((type *)malloc((size_t)((nb)*sizeof(type))))
  • //TAILLE_B(void* ptr);
  • /////inline TAILLE_B(void* ptr) {if (ptr != NULL) return _msize(ptr); else return 0;}
  • // WARNING, EXCEPTION a recuperer
  • #define ALLOUE(ptr,type) do{\
  • if ((ptr = ((type *)malloc((size_t)(sizeof(type)))) )== NULL) \
  • PB2("\n\nPAS ASSEZ DE MEMOIRE - Erreur allocation dynamique\n \t _ALLOUE(ptr,type)\n\n",-50);}while(0)
  • #define ALLOUEn(ptr,type,nb) do{\
  • if ((ptr = ((type *)malloc((size_t)((nb)*sizeof(type)))) )== NULL) \
  • PB2("PAS ASSEZ DE MEMOIRE - Erreur allocation dynamique\n \t _ALLOUEn(ptr,type,nb)",-50);}while(0)
  • //idem avec new
  • #define ALLOUE2n(ptr,type,nb) do{\
  • if ((ptr = new type[nb])== NULL ) \
  • PB2("PAS ASSEZ DE MEMOIRE - Erreur allocation dynamique\n \t _ALLOUEn(ptr,type,nb)",-50);}while(0)
  • //////RALLONGEx sont en Test
  • #define RALLONGE(ptr,type) do{int taille; \
  • if (ptr != NULL) taille=_msize(ptr); else taille=0;\
  • if (( ptr = ( (type *)realloc(ptr,(size_t)(taille+ sizeof(type))) ) )== NULL) \
  • PB2("\n\nPAS ASSEZ DE MEMOIRE - Erreur de reallocation dynamique (_RALLONGE)\n\n",-50);}while(0)
  • #define RALLONGEn(ptr,type,nb) do{int taille; \
  • if (ptr != NULL) taille=_msize(ptr); else taille=0;\
  • if (( ptr = ( (type *)realloc(ptr,(size_t)(taille+(nb)*sizeof(type))) ) )== NULL) \
  • PB2("\n\nPAS ASSEZ DE MEMOIRE - Erreur de reallocation dynamique (_RALLONGEn)\n\n",-50);}while(0)
  • //ATTENTION, le type rallongé doit etre du mm type que rallonge
  • // WARNING, EXCEPTION a recuperer
  • #define AJUSTE(ptr,type,nb) do{if (( ptr = ( (type *)realloc(ptr,(size_t)((nb)*sizeof(type))) ) )== NULL)\
  • PB2("\n\nPAS ASSEZ DE MEMOIRE - Erreur de reallocation dynamique (reajuste)\n\n",-50);}while(0)
  • #endif /* !MACROS_DE_GESTION_MEMOIRE_HPP */
#ifndef MACROS_DE_GESTION_MEMOIRE_HPP
#define MACROS_DE_GESTION_MEMOIRE_HPP

//PB1(msg) affiche un msg d'err et sort ou lève une exception -1
//PB2(msg,nb) affiche un msg d'err et sort ou lève une exception nb
//Considérez pour pour l'instant... (les DLL arrivent bientot...)
#define PB1(txt) {exit(-1);}
#define PB2(txt,numException) {puts(txt);exit(numException);}



#ifdef MACROS_DE_GESTION_MEMOIRE

#ifndef MACROS_DE_GESTION_MEMOIRE_HPP
#define MACROS_DE_GESTION_MEMOIRE_HPP
///pour les allocations
//              allocation dynamiques - faire FREE apres utilisation
//      exemples :ALLOUE(t,TableEntiere_); - // ALLOUEn(text,char,25);
//      nota, vu que svt y a des erreurs, rajouter la taille d'un car de terminaison!!!
#include <malloc.h>
//pour enlever des bugs de Visual...
#define FREE(ptr) do{if(ptr!=NULL)free(ptr);ptr=NULL;}while(0)
#define BDELETE(ptr) do{if((ptr)!=NULL){delete(ptr);(ptr)=NULL;}}while(0)
//#define MALLOC(type) ((type *)malloc((size_t)(sizeof(type))))
//#define MALLOCn(type,nb) ((type *)malloc((size_t)((nb)*sizeof(type))))
//TAILLE_B(void* ptr);
/////inline TAILLE_B(void* ptr) {if (ptr != NULL) return _msize(ptr); else return 0;}
// WARNING, EXCEPTION a recuperer
#define ALLOUE(ptr,type) do{\
	if ((ptr = ((type *)malloc((size_t)(sizeof(type)))) )== NULL) \
	PB2("\n\nPAS ASSEZ DE MEMOIRE - Erreur allocation dynamique\n \t _ALLOUE(ptr,type)\n\n",-50);}while(0)
#define ALLOUEn(ptr,type,nb) do{\
	if ((ptr = ((type *)malloc((size_t)((nb)*sizeof(type)))) )== NULL) \
	PB2("PAS ASSEZ DE MEMOIRE - Erreur allocation dynamique\n \t _ALLOUEn(ptr,type,nb)",-50);}while(0)
//idem avec new
#define ALLOUE2n(ptr,type,nb) do{\
	if ((ptr = new type[nb])== NULL ) \
	PB2("PAS ASSEZ DE MEMOIRE - Erreur allocation dynamique\n \t _ALLOUEn(ptr,type,nb)",-50);}while(0)
//////RALLONGEx sont en Test
#define RALLONGE(ptr,type) do{int taille; \
	if (ptr != NULL) taille=_msize(ptr); else taille=0;\
	if (( ptr = ( (type *)realloc(ptr,(size_t)(taille+ sizeof(type))) ) )== NULL) \
	PB2("\n\nPAS ASSEZ DE MEMOIRE - Erreur de reallocation dynamique (_RALLONGE)\n\n",-50);}while(0)
#define RALLONGEn(ptr,type,nb) do{int taille; \
	if (ptr != NULL) taille=_msize(ptr); else taille=0;\
	if (( ptr = ( (type *)realloc(ptr,(size_t)(taille+(nb)*sizeof(type))) ) )== NULL) \
	PB2("\n\nPAS ASSEZ DE MEMOIRE - Erreur de reallocation dynamique (_RALLONGEn)\n\n",-50);}while(0)
//ATTENTION, le type rallongé doit etre du mm type que rallonge
// WARNING, EXCEPTION a recuperer
#define AJUSTE(ptr,type,nb) do{if (( ptr = ( (type *)realloc(ptr,(size_t)((nb)*sizeof(type))) ) )== NULL)\
	PB2("\n\nPAS ASSEZ DE MEMOIRE - Erreur de reallocation dynamique (reajuste)\n\n",-50);}while(0)


#endif /* !MACROS_DE_GESTION_MEMOIRE_HPP */





 Historique

28 octobre 2004 16:01:14 :
MaJ, dowhile .... car les if faisaient sauter les else et les bloc seront pas dans la structure de controle voulu (merci DJL de m'avoir rappeler de mettre a jours ces sources ici aussi)

 Sources du même auteur

Source avec Zip [MFC] BCOMBOBOX & BLISTBOX
Source avec Zip Source avec une capture [ C++ WIN32 ] REMPLISSAGE DE FICHE - FENETRE DYNAMIQUE
Source avec Zip Source avec une capture WIN32 - MFC - VC6 - PLACE D'UNE APPLI : BARRE DES TACHES OU ...
Source avec Zip [WIN32] [VC6] BOITE À CHOIX MULTIPLE PAR BOUTONS
Source avec Zip TEMPLATE DE DIALOG/FENETRE (VC++)

 Sources de la même categorie

Source avec Zip Source avec une capture INFORMATION PROCESSEUR (CPUID) par Devils_Tiger
Source avec Zip Source avec une capture LECTURE TEMPÉRATURE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture LECTURE FRÉQUENCE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10

Commentaires et avis

Commentaire de Arnotic le 18/12/2003 10:18:16 administrateur CS

Je ne vois pas l'interet de ton programme.

Commentaire de magic_Nono le 18/12/2003 15:06:11

Il s'agit juste de macros et pas d'un programme,
je les utilise juste pour alléger l'écriture des codes et pour éviter de réécrire la protection a chaque fois....

En effet, sans ça, de nbreux codeur néglige de vérifier que leurs allocations ont étées bien effectuées et donc...
soit
- des calculs sont faux
- le prg plante pour des raisons qui n'ont rien à voir!!!

Je ne comprends pas du tt votre notation car C une astuce bien pratique.... Cependant, si vous attendez de véritable prg tt fait alors...

Amicalement,
   Nono.

Commentaire de Arnotic le 18/12/2003 15:09:11 administrateur CS

oki merci.

Commentaire de Thaeron le 19/12/2003 00:22:24

Salut, quand on ne comprend pas on ne note pas.
J'ai pas tout compris a tes macros d'ailleurs (j'ai regardé vite fait aussi) mais ça m'a l'air pas mal pratique (j'ai la mauvaise habitude de ne jamais regardé si l'allocation avec malloc a été bien faite ni si la suppression d'un élément d'une liste chainé a été bien faite).
En tout cas continue =)
Bonne prog

Commentaire de vObjects le 19/12/2003 00:38:55

de facon simple:

if ( (var = (type)malloc(taille)) == NULL ) {
   cout &lt;&lt; "Erreur ..." &lt;&lt; endl;
  // ou
  // printf("Erreur ...
");
  // peu importe ...
}

En C++ new/delete sont préférable à malloc()/free() (constructeur/destructeur)

Je n'est pas regardé le source mais, s'il y à une erreur quelconque, il faut quand même la gérer ... Même si ton code permet ou non d'éviter un 'plantage' du programme, il faut quand même savoir si l'allocation est ok ou non et savoir quoi faire selon le problème ...

Moi perso, je ne voit pas l'utiliter de ce source tout comme la première version que tu avais posté il y à quelques temps http://www.cppfrance.com/code.aspx?ID=10905

Sur ce, beubye && @++;

Commentaire de magic_Nono le 22/12/2003 17:56:59

salud,

Merci pour vos com...

Les macros PB1 & PB2 permettent de sortir du prg ou d'envoyer des exception et donc on poura

les traiter plus loin...

Perso, J'utilise ce macros depuis 4 ans & G plus de pb de gestion mem depuis...

Voici un petit manuel:
en C on utilise
  ALLOUE, ALLOUEn & FREE
  voir RALLONGE, RALLONGEn & AJUSTE
en C++ on utilise
  new & BDELETE


ALLOUE    : alloue une case mémoire
ALLOUEn  : alloue une table de n cases
FREE        : libère la zone allouée
RALLONGE : rallonge une table de 1 case
RALLONGEn rallonge une table de n cases
AJUSTE     : remet n cases pour ce qui a été précédement allouée (allocation ou destructions

implicites)

BDELETE : comme delete en évitant les erreurs données par certains compilateurs
Rq: lors de la création d'un pointeur, prenez l'habitude de lui affecter null, ou affectez

le directement, cela évite certains soucis

Voilà...
après les vac, je publierai des méthodes pour les exceptions ainsi qu'un logiciel complet:

MétaProgLight 2.0 (gestion de srces & doc auto)

sinon, je vous souhaite à tous un Joyeux et Saint Noël
@+ Nono.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales