magic_Nono
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
8 sept. 2004 à 16:47
pas de pb :
regarde simplement l'utilisation de ces macros dans mes sources...
(je te fais ici une compile car je ne sais pas si tu es en C ou C++)
#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{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)
vu que PB2 est utilisé, je t'en donne les significations
: au choix, tu prend le mode le plus approprié !
#ifdef B_EXCEPTIONS
#ifdef _DEBUG
// Les exceptions sont définies avec trace.")
#define PB1(txt) do{BString plomp="Exception levee : "; plomp+=txt;saveToErrorLog(plomp);throw (BException(txt));}while(0)
#define PB2(txt,numException) do{BString plomp="Exception levee : num "; plomp+=numException;plomp+=" : ";plomp+=txt;saveToErrorLog(plomp);throw (BException(txt,numException));}while(0)
#else /* _DEBUG */
// Les exceptions sont définies sans trace.")
#define PB1(txt) {throw (BException(txt));}
#define PB2(txt,numException) {throw (BException(txt,numException));}
#endif /* _DEBUG */
#else /* B_EXCEPTIONS */
#ifdef _DEBUG
// Les erreurs sont définies avec trace.(sortie : trace & mode console)")
#define PB1(txt) {saveToErrorLog("Interruption");saveToErrorLog(txt);exit(-1);}
#define PB2(txt,numException) {saveToErrorLog("Interruption");saveToErrorLog(txt);puts(txt);exit(numException);}
#else /* _DEBUG */
// Les erreurs sont définies sans trace.(sortie en mode console uniquement)")
#define PB1(txt) {exit(-1);}
#define PB2(txt,numException) {puts(txt);exit(numException);}
#endif /* _DEBUG */
#endif /* B_EXCEPTIONS */
là G po trop de tps, dc, je pense que tu devrais t'en sortir
sinon, demande...
Magic Nono: l'informagicien! 8-)