Malloc

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 580 fois - Téléchargée 32 fois

Contenu du snippet

Un malloc qui retourne jamais NULL

Source / Exemple :


// Il est souvent utile dans un programme
// de vouloir allouer de la memoire.
// pour cela on utlilise la fonction 'malloc'.
// On va faire notre nouveau 'malloc'.
// Car la fonction 'malloc' peut retourner NULL,
// Et ceci nous oblige a toujours tester la valeur
// de retour.Cela est neanmoins rare.
#include <stdlib.h>   // malloc,exit
#include <stdio.h>    // printf
#include <conio.h>    // getch

//-----------------------------------------------
// MALLOC
//-----------------------------------------------
void *Malloc(size_t SizeOfMalloc)
{
// pointeur sur la zone memoire allouee.
void *p;

// on alloue.
p = malloc(SizeOfMalloc);

// on teste si cela n'a pas reussi
if(p == NULL)
  {
  // un message
  printf("Impossible d'allouer %d octets de memoire !\n",SizeOfMalloc);
  // on attend
  getch();
  // ceci est rare, donc on peut ce permettre
  // de quitter tout le programme dans le cas echeant.
  exit(1);
  }

// sinon on retourne le pointeur.
return p;
}

//-----------------------------------------------
// MAIN
//-----------------------------------------------
int main(int argc,char **argv)
{
// voici des varibles a plusieurs types.
char    *a;
int     *b;
long    *c;
double  *d;
float   *e;

// on alloue de la memoire pour chacune des variables. (1000000 de chaque)
a = Malloc(sizeof(char    ) * 1000000);
b = Malloc(sizeof(int      ) * 1000000);
c = Malloc(sizeof(long    ) * 1000000);
d = Malloc(sizeof(double) * 1000000);
e = Malloc(sizeof(float   ) * 1000000);

// on teste si un des pointeurs est nuls.
if(! (a && b && c && d && e) )
  {
  printf("BUG : Notre malloc n'aurait pas du\n");
  printf("retourner NULL (sous aucun pretexte) !\n");
  }
else
  {
  printf("Aucun pointeur est nul.\n");
  printf("Notre malloc a l'air de marcher ...\n");
  }

// on libere les zones de memoire allouees
free(a);
free(b);
free(c);
free(d);
free(e);
// on attend.
getch();
return 0;
}

A voir également

Ajouter un commentaire Commentaires
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
Bijour tous,

Personnellement,
j'ai résolu le pb avec des macros et des exceptions...
donc, il n'y a pas forcément sortie du prg...

allez donc jeter un oeil sur cette page:
http://www.cppfrance.com/code.aspx?ID=18786

Magicalement
Messages postés
7
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
27 octobre 2003

>>Message de NitRic déposé le 16/06/2003 12:54:48
t'as raison, je suis en general du même point de vu mais ce matin il était tôt et bon j'avai pas envie de faire l'extrèmiste...en plus les bonnes habitudes c'est au debut k'il faut les prendre ;)
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
OK :
Comme vous voudrez !
MOI ca me sert tout le temps !
...
(j'ai compris votre point de vue !)
Messages postés
1
Date d'inscription
lundi 16 juin 2003
Statut
Membre
Dernière intervention
16 juin 2003

ton truc est parfaitement inutile, imagine si tout les progs était trashé lorsqu'une alloc dynamique est foirée...
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

Oui, mais imagine qu'il ne libère pas la mémoire qu'il utilise ou autre chaque fois qu'il y à un problème ... s'il lui faut beaucoup de ram pour son prog, à la longue, il va beaucoup trop charger la ram et pour rien, de ce fait, il occupera une grande partie de la ram! Moi perso je dit:

IL FAUT FAIRE ATTENTION À NOTRE JOLIE PETITE RAM!!!

Même si elle est libérer à la fin du prog, quand il ce ferme ...
Mais, j'appuie Peak pour le début de sont commentaire, OO


@++;


~(.:: NitRic ::.)~
Afficher les 19 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.