SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 25 nov. 2006 à 23:38
Si ça peut t'aider, j'avais fais des fonctions qui geraient
dynamiquement la mémoire de pointeur de pointeurs. Elles peuvent
probablement être améliorée:
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 26 nov. 2006 à 00:54
Son addresse est retourné et la mémoire est toujours alloué car à moin que je me trompe, c'est à ça que sers malloc. Elle est ensuite récupérer par TAB qui pointera donc sur la zone réservé par malloc.
D'ailleur, y'a encore des problèmes dans mes fonctions. Voici ENCORE une correction:
void **malloc2d (int num, int size)
{
void **tab, **c;
Attention ta variable tab n'existe plus en dehors de la fonction ou elle est crée.
Il se peut que quelque chose soit écrit par dessus, et le programme plantera.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 26 nov. 2006 à 00:35
Bon. J'ai fais à la va vite une fonction de réallocation qui permet de
redéfinir la taille de tout les pointeurs pointé et apporter aussi des
corrections (sécurités) à mes autres fonctions:
void **malloc2d (int num, int size)
{
void **tab, **c;
if(num <= 0 || size <= 0) return 0;
tab(void**)malloc(sizeof(void*)*num); c tab;
if(!c) return 0;
while(num > 0)
{
*c = (void*)malloc(size);
if(*c == 0) return 0;
c++; num--;
}
return tab;
}
void free2d (void **tab, int num)
{
void **c = tab;
if(c == 0 || num <= 0) return;
while(num > 0)
{
free(*c);
c++; num--;
}
free((void*)tab);
}
void **realloc2d (void **tab, int num, int newsize)
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 26 nov. 2006 à 00:46
Oui ;), la variable tab est créée dans la fonction, donc est détruite en sortant de la fonction.
Le système croit les 4 octets libres donc peut se permettre d'écrire dessus.
char **TAB = (char**)malloc2d(2, 10);
TAB est la copie du tab de la fonction.
Or à l'adresse de tab, n'importe quoi peut être écrit par le système.
Donc TAB (qui reste inchangé) peut pointer vers des données 'inconnues'.
timy94
Messages postés50Date d'inscriptionjeudi 17 novembre 2005StatutMembreDernière intervention 7 janvier 2009 30 nov. 2006 à 14:15
Voila comment j'ai traité mon problème de réservation de mémoire pour une tableau de pointeur sur strucutre et ça marche pas mal
Une fonction que alloue de la mémoire au tableau et aux strucutres et une fonction qui libère de la mémoire la place en memoire pour
les structures et qui diminue le nombre d'élément d'un tableau .UNEPAGE et un define qui indique le nombre d'element minimun à réserver.
/*******************************************************************************
* Fonction : augmentertaille
* Objet : Réservation de la place mémoire