Allocation dynamique

cs_ralou Messages postés 11 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 8 mars 2006 - 9 févr. 2006 à 04:40
cs_ralou Messages postés 11 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 8 mars 2006 - 10 févr. 2006 à 14:41
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
9 févr. 2006 à 08:41
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;
0
Galmiza Messages postés 573 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 9 avril 2008 1
9 févr. 2006 à 10:08
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.
0
cs_ralou Messages postés 11 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 8 mars 2006
9 févr. 2006 à 18:10
salut tlm



merci a vous chers amis



bonne journée
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
10 févr. 2006 à 08:52
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ralou Messages postés 11 Date d'inscription lundi 6 février 2006 Statut Membre Dernière intervention 8 mars 2006
10 févr. 2006 à 14:41
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
0