Allocation dynamique

Signaler
Messages postés
11
Date d'inscription
lundi 6 février 2006
Statut
Membre
Dernière intervention
8 mars 2006
-
Messages postés
11
Date d'inscription
lundi 6 février 2006
Statut
Membre
Dernière intervention
8 mars 2006
-
salut tlm

mon prob c est que je veux utiliser une fonction pour creer des tableaus dynamiques (langage C), mais j'arrive pas a comprendre ou a vrai dire savoir exploiter ce que cette fonction me retourne

int **allouerEcran(int ligne, int colonne)
{
int **ecran = (int **)malloc(sizeof(int *) * ligne);
int i = 0;
for( i = 0; i < ligne ; i++)
{
ecran[i] (int *)malloc(sizeof(int) * colonne);
}
}
alors moi je voulais que la fonction m'alloue un espace avec le nombre de ligne et de colonne passés en param, et il me retourne l'adresse de cette alocation (si j'ai bien compris)
mnt je veux recuperer ce que cette fonction va me retourner et le traiter comme tableau deux dimension, svp comment puis je faire ca, c'est la que je suis bloqué mnt

merci d'avance

5 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Pour commencer, il manque le '=' d'affectation.
ecran[i]= (int *)malloc(sizeof(int) * colonne);
Et le retour
return ecran;

Ensuite, pour l'utiliser :
int** tab = allouerEcran(10, 5);
tab[2][3] = 5;
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Furthermore, le "int **ecran" est déclaré en local, donc est créé dans la fonction et détruit à sa sortie. Si le PC alloue de la mémoire au même emplacement par la suite, tu perdras les données.
Donc fais un "static int **ecran" , ainsi les 4 octets sont sauvés dans le corps de la fonction aucun risque qu'ils se fassent marcher dessus.
Messages postés
11
Date d'inscription
lundi 6 février 2006
Statut
Membre
Dernière intervention
8 mars 2006

salut tlm



merci a vous chers amis



bonne journée
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Galmiza :
C'est pas la peine de déclarer ecran en static. Etant donné qu'il y a un malloc, l'addresse retournée et stockée dans la variable locale ecran pourra être retournée par la fonction et accessible ailleur dans le programme.

Il faut mettre en static les buffer statique retournés par une fonction par exemple
int **allouerEcran(int ligne, int colonne)
{
static int *ecran[8]
int i = 0;
for( i = 0; i < ligne ; i++)
{
ecran[i] (int *)malloc(sizeof(int) * colonne);
}
return ecran;
}
=> dans ce cas ecran doit être static par ce que tout le tableau n'est pa dynamiquement alloué et ne serait pas
accessible en dehors de la fonction.

Dans le cas de ralou, comme toutes les dimensions sont dynamiquement allouées, il suffit d'avoir l'adresse initiale pour accéder et libérer où on veut dans le code.
Messages postés
11
Date d'inscription
lundi 6 février 2006
Statut
Membre
Dernière intervention
8 mars 2006

merci encore Galmiza
c'est bien ca ce que j'ai fais, j'ai recu uniquement l'adresse pour y acceder, en fait c'etait juste un petit programme, pour agrandir les images pgm, mais il fallait que je comprenne comment utiliser ces allocation :-) puisque c'est mon premier prog en c
merci encore et bonne journée