cs_ralou
Messages postés11Date d'inscriptionlundi 6 février 2006StatutMembreDernière intervention 8 mars 2006
-
9 févr. 2006 à 04:40
cs_ralou
Messages postés11Date d'inscriptionlundi 6 février 2006StatutMembreDerniè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
Galmiza
Messages postés573Date d'inscriptionsamedi 16 novembre 2002StatutMembreDernière intervention 9 avril 20081 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.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_ralou
Messages postés11Date d'inscriptionlundi 6 février 2006StatutMembreDerniè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