Accueil > Forum > > > > malloc,calloc,realloc,free
malloc,calloc,realloc,free
jeudi 24 mai 2007 à 20:46:58 |
malloc,calloc,realloc,free

halima
|
Bonjour je dois ecrire les fonction malloc calloc realloc et free
pour qu'ils agissent exactement comme ceux de la bibliothe (stdlib).le
maximun de memoire a allouer est 1MB et je dois gerer toutes les
erreurs d'allocation.jai ecris une partie mais jai des pb avec la
fonction malloc.Si quelqu'un l'a deja fais j'aimerai bien voir les
codes pour comparer et me debloquer.Sinon j'aimerai bien de l'aide.
Code :
-
#include "halde.h"
-
#include <unistd.h>
-
#include <errno.h>
-
#include <string.h>
-
#include <stdio.h>
-
#include <stdlib.h>
-
-
#define KENNUNG ((void*)0x00beef00)
-
#define SIZEMBLOCK (sizeof(mblock))
-
#define MB (1024*1024)
-
-
/* Speicherverwaltung */
-
typedef
struct mblock {
-
size_t size;
-
struct mblock *next;
-
} mblock;
-
-
/* globale Variablen */
-
static
char *newmem = NULL;
-
static mblock *fsp = NULL;
-
-
int bloecke = 0;
-
-
static mblock *getMblock(void *ptr){
-
if(NULL == ptr)
-
returnNULL;
-
return(mblock *)((char *)ptr - SIZEMBLOCK);
-
}
-
-
static
void init(){
-
newmem = (char *)sbrk(MB);
-
if(-1 == (int)newmem){
-
perror("sbrk");
-
exit(EXIT_FAILURE);
-
}else{
-
fsp = (mblock *)newmem;
-
fsp->size = MB-SIZEMBLOCK;
-
fsp->next = NULL;
-
}
-
}
-
-
void *malloc(size_t size){
-
mblock *fsp_alt = fsp;
-
mblock *fsp_neu = fsp;
-
mblock *fsp_merken = fsp;
-
int units = 0;
-
int lauf = 0;
-
-
if(NULL == newmem){
-
init();
-
}
-
-
if(size == 0)
-
return(void *)1;
-
-
while(fsp_alt && fsp_alt->size < size){
-
/* Speicher finden */
-
fsp_merken = fsp_alt;
-
fsp_alt = fsp_alt->next;
-
lauf++;
-
}
-
-
if(!fsp_alt){
-
errno = ENOMEM;
-
returnNULL;
-
}
-
-
units = ((size-1) / SIZEMBLOCK) + 1;
-
if(fsp_alt->size > (((units + 1) * SIZEMBLOCK) + SIZEMBLOCK)){
-
fsp_neu = fsp_alt + 1 + units;
-
fsp_neu->size = fsp_alt->size - (units + 1) * SIZEMBLOCK;
-
fsp_neu->next = fsp_alt->next;
-
}else{
-
fsp_neu = fsp_alt->next;
-
}
-
fsp_alt->next = KENNUNG;
-
bloecke++;
-
-
if(fsp_alt == fsp)
-
fsp = fsp_neu;
-
else{
-
fsp_merken->next = fsp_neu;
-
}
-
-
return((void *)(fsp_alt + 1));
-
}
-
-
void
free
(
void* ptr){
-
mblock *tmp = NULL;
-
if(NULL == ptr || ptr == (void *)1)
-
return;
-
tmp = getMblock(ptr);
-
if(tmp->next != KENNUNG){
-
abort();
-
}else{
-
tmp->next = fsp;
-
fsp = tmp;
-
}
-
}
-
-
void *realloc(void *ptr,size_t size){
-
mblock *tmp = getMblock(ptr);
-
if(ptr == (void *)1 || ptr == NULL){
-
returnmalloc(size);
-
}
-
if(size == 0){
-
free(ptr);
-
returnNULL;
-
}
-
if(size == tmp->size){
-
return ptr;
-
}else{
-
void *new = NULL;
-
free(ptr);
-
new = malloc(size);
-
if(new != ptr)
-
new = memcpy(new,ptr,tmp->size);
-
returnnew;
-
}
-
-
-
returnNULL;
-
}
-
-
void *calloc(size_t nmemb, size_t size){
-
void *new = malloc(nmemb*size);
-
if(new)
-
memset(new,0,nmemb*size);
-
returnnew;
-
}
|
|
jeudi 24 mai 2007 à 21:13:45 |
Re : malloc,calloc,realloc,free

acx01b
|
salut
perso j'ai rien compris à ton code
comment alloues-tu la mémoire ??
ce qui me vient à l'idée ça serait de commencer par un tableau global
char mem[1024*1024];
ensuite tu alloues des blocs à l'intérieur de cette memoire
en faisant comme les compilateurs C: la première case du tableau indique la taille de la mémoire qui suit
|
|
jeudi 24 mai 2007 à 21:25:21 |
Re : malloc,calloc,realloc,free

BruNews
|
"je dois ecrire les fonction malloc..." Faudra donc appeler les fonctions d'allocation du système hote. Compilant pour Windows, malloc() finit chez HeapAlloc(), sous Linux aucune idée.
ciao... BruNews, MVP VC++
|
|
jeudi 24 mai 2007 à 21:34:32 |
Re : malloc,calloc,realloc,free

halima
|
c'est vraiment difficile de comprendre avec cet affichage pourtant jai utilisé la balise de code.en fait je cree un espace en utilisant la fonction sbrk(). En fait quant je verifie abec le dbg je me retrouve avec une bouble infinie au niveau de malloc ou free je sais pas trop.je n'arrive pas a reperer l'erreur-
|
|
Cette discussion est classée dans : alt, void, ptr, size, fsp
Répondre à ce message
Sujets en rapport avec ce message
Memory Pool [ par guiguikun ]
Bonjour,j'ai téléchargé la partie du code source de Quake3 releasé par ID Software par curiosité.Je l'ai lu pour voir un peu comment le jeu fonctionna
[debutant]Operation de chaine encore :s [ par firemax ]
Bonjour Certain reconaitrons ce code (surtout vecchio56) mais voila ca marche toujours pas et je ne comprend pas :'( Please helllppp Code : #in
Surcharge d'opérateur [ par lucyhle ]
Bonjour, J'ai des trous de mémoires de de compétences sur la surcharge d'opérateur. A quoi ca sert? Par exemple ici: pourquoi surcharge t'on les opé
aide [ par achrafgassolina ]
salut tout le monde la j ai une érreure et je c pas comment la resoudre dans la ligne 296:36 dans la condition if et aprés je veux faire la saisie des
map [ par taieb84 ]
salut j'ai une classe caisse class caisse{ float val; int nbr; public: bool exist(float); void ajouter(floa
Pb avec D3DXCreateTextureFromFileInMemory [ par DIMUSERS ]
Bonjour,Je vous soumet un code qui ne fonctionne pas ! Le but recherché est de créer une texture avec un texte issu d'une fonte du GDI. Le code retour
STL: pb mémoire "physique" non libérée avec un vector [ par pipocodesrc ]
Bonjour à tous, j'utilise des vecteurs pour stocker des objets 3d, ors la mémoire physique utilisée par le vecteur au fur et à mesure de ses besoins n
Modification Size d'un Label [ par lillith212 ]
Bonjour à tous,Je suis entrain de réaliser mes premiers pas en C++ et je suis entrain de réaliser une application en C++ builder 6Je travaille sous wi
Ajouter, Modifier ou Supprimer(lire et écrire) dans un fichier texte [ par cathy9999 ]
Bonjour, je souhaite réaliser une gestion de clients en c++, c'est à dire me permettre d'afficher, ajouter, modifier ou supprimer un client qui serait
du C au C++ [ par nidhaletec ]
si quelqu un m aide à convertir cette fonktion en C++ ; c écrit en C ;void remplacer (char *filename, char *str, char *occ){ FILE *f = fopen(filen
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|