Je cherche à initialiser un tableau en 2 dimenssion via une allocation
dynamique de la mémoire. L'utilisateur entrant le max en X et le max en Y
, j'obtiens un tableau de sommets au final.
J'ai déclaré un pointeur dans ma blibliotheque "VL.h" et je voudrais
donc dans une fonction type " void InitPointArray(vl_point *pointeur, int
max_x, int max_y) ; ", le type vl_point est une structure.
Suis-je dans la bonne voie ? Ou dois-je utiliser une autre fonction pour
creer ce tableau ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
kilobug
Bonjour tout le monde,
Bonsoir
J'ai déclaré un pointeur dans ma blibliotheque "VL.h" et je voudrais donc dans une fonction type " void InitPointArray(vl_point *pointeur, int max_x, int max_y) ; ", le type vl_point est une structure.
Ta fonction doit renvoyer un pointeur (ou en modifier un) pour communiquer le résultat de l'allocation. Pour modifier un pointeur, tu as besoin d'un pointeur sur ce pointeur, puisque le passage d'arguments se fait par valeur.
DOnc je te propose les deux prototypes uisvant: void init_point_array(vl_point **ptr, int max_x, int max_y); vl_point *init_point_array(int max_x, int max_y);
Je te laisse choisir ;)
V.L.
-- Gael Le Mignot "Kilobug" - - http://kilobug.free.fr GSM : 06.71.47.18.22 (in France) ICQ UIN : 7299959 Fingerprint : 1F2C 9804 7505 79DF 95E6 7323 B66B F67B 7103 C5DA
Member of HurdFr: http://hurdfr.org - The GNU Hurd: http://hurd.gnu.org
Bonjour tout le monde,
Bonsoir
J'ai déclaré un pointeur dans ma blibliotheque "VL.h" et je voudrais
donc dans une fonction type " void InitPointArray(vl_point *pointeur, int
max_x, int max_y) ; ", le type vl_point est une structure.
Ta fonction doit renvoyer un pointeur (ou en modifier un) pour
communiquer le résultat de l'allocation. Pour modifier un pointeur, tu
as besoin d'un pointeur sur ce pointeur, puisque le passage
d'arguments se fait par valeur.
DOnc je te propose les deux prototypes uisvant:
void init_point_array(vl_point **ptr, int max_x, int max_y);
vl_point *init_point_array(int max_x, int max_y);
Je te laisse choisir ;)
V.L.
--
Gael Le Mignot "Kilobug" - kilobug@nerim.net - http://kilobug.free.fr
GSM : 06.71.47.18.22 (in France) ICQ UIN : 7299959
Fingerprint : 1F2C 9804 7505 79DF 95E6 7323 B66B F67B 7103 C5DA
Member of HurdFr: http://hurdfr.org - The GNU Hurd: http://hurd.gnu.org
J'ai déclaré un pointeur dans ma blibliotheque "VL.h" et je voudrais donc dans une fonction type " void InitPointArray(vl_point *pointeur, int max_x, int max_y) ; ", le type vl_point est une structure.
Ta fonction doit renvoyer un pointeur (ou en modifier un) pour communiquer le résultat de l'allocation. Pour modifier un pointeur, tu as besoin d'un pointeur sur ce pointeur, puisque le passage d'arguments se fait par valeur.
DOnc je te propose les deux prototypes uisvant: void init_point_array(vl_point **ptr, int max_x, int max_y); vl_point *init_point_array(int max_x, int max_y);
Je te laisse choisir ;)
V.L.
-- Gael Le Mignot "Kilobug" - - http://kilobug.free.fr GSM : 06.71.47.18.22 (in France) ICQ UIN : 7299959 Fingerprint : 1F2C 9804 7505 79DF 95E6 7323 B66B F67B 7103 C5DA
Member of HurdFr: http://hurdfr.org - The GNU Hurd: http://hurd.gnu.org
levasseur vincent
Merci beaucoup pour vos deux prompts réponses ! :)
Je pense que je vais utiliser la méthode tableau de tableau avec un malloc à l'intérieur. :)
Comment faire si on demande le nombre de points maximum à l'utilisateur, et que l'on désire regrouper l'ensemble des points dans un tableau ? En effet a-t-on le droit de faire
Dans tout les cas le mieux serait de faire un tableau de point et un tableau pour la couleur (RGB) en utilisant toujours un tableau de tableau ;)
Mais j'avoue que ne gérer qu'un tableau de structures me tente vraiment.
VL
Le Wed, 24 Dec 2003 00:54:47 +0100, Marc Lasson a écrit :
levasseur vincent wrote:
Bonjour tout le monde, Bonsoir,
Je cherche à initialiser un tableau en 2 dimenssion via une allocation dynamique de la mémoire.
Est-ce que ca veut dire que tu alloues un tableau PUIS que tu l'initialises ?
J'ai déclaré un pointeur
Tu as fait un "void *pointeur;" ?
dans ma blibliotheque "VL.h"
C'est un fichier d'entête.
et je voudrais donc dans une fonction type " void InitPointArray(vl_point *pointeur, int max_x, int max_y) ; ", le type vl_point est une structure.
Suis-je dans la bonne voie ? Ou dois-je utiliser une autre fonction pour creer ce tableau ?
Merci beaucoup
Bon, je n'ai pas tout bien compris, je vais essayer de répondre au mieux.
Tout d'abord, tout dépends de comment tu implémentes ton tableau dynamique à deux dimensions. En C, il éxiste un moyen fort commode, c'est de faire un tableau de tableau.
J'appellerais "tableau" dynamique, un pointeur vers une zone de mémoire contigüe.
ex un tableau de n int: int *tableau = malloc (n * sizeof (int)); qu'on peut initialiser à 42 : for (int i = 0;i < n;i ++) tableau[i] = 42;
Un tableau de m tableau de n int ca nous donnerai donc: int **tableau = malloc (m * sizeof (int *)); for (int i = 0;i < m; i ++) { tableau[i] = malloc (n * sizeof (int)); }
on peut egalement initialiser les m fois n cases à 42: for (int i = 0;i < m;i ++) { for (int k = 0;k < n; k ++) { tableau[i][k] = 42; } }
Don si tu veux faire une fonction qui créé et initialise un tableau de "vl" à deux dimensions elle devrai ressembler à ça: vl **creer_tableau (int max_x, int max_y);
Mais il existe d'autres façons de faire.
Merci beaucoup pour vos deux prompts réponses ! :)
Je pense que je vais utiliser la méthode tableau de tableau avec un
malloc à l'intérieur. :)
Comment faire si on demande le nombre de points maximum à l'utilisateur,
et que l'on désire regrouper l'ensemble des points dans un tableau ?
En effet a-t-on le droit de faire
Dans tout les cas le mieux serait de faire un tableau de point et un
tableau pour la couleur (RGB) en utilisant toujours un tableau de tableau ;)
Mais j'avoue que ne gérer qu'un tableau de structures me tente vraiment.
VL
Le Wed, 24 Dec 2003 00:54:47 +0100, Marc Lasson a écrit :
levasseur vincent wrote:
Bonjour tout le monde,
Bonsoir,
Je cherche à initialiser un tableau en 2 dimenssion via une allocation
dynamique de la mémoire.
Est-ce que ca veut dire que tu alloues un tableau PUIS que tu
l'initialises ?
J'ai déclaré un pointeur
Tu as fait un "void *pointeur;" ?
dans ma blibliotheque "VL.h"
C'est un fichier d'entête.
et je voudrais donc dans une fonction type " void
InitPointArray(vl_point *pointeur, int
max_x, int max_y) ; ", le type vl_point est une structure.
Suis-je dans la bonne voie ? Ou dois-je utiliser une autre fonction pour
creer ce tableau ?
Merci beaucoup
Bon, je n'ai pas tout bien compris, je vais essayer de répondre au mieux.
Tout d'abord, tout dépends de comment tu implémentes ton tableau
dynamique à deux dimensions. En C, il éxiste un moyen fort commode,
c'est de faire un tableau de tableau.
J'appellerais "tableau" dynamique, un pointeur vers une zone de
mémoire contigüe.
ex un tableau de n int:
int *tableau = malloc (n * sizeof (int));
qu'on peut initialiser à 42 :
for (int i = 0;i < n;i ++)
tableau[i] = 42;
Un tableau de m tableau de n int ca nous donnerai donc:
int **tableau = malloc (m * sizeof (int *));
for (int i = 0;i < m; i ++)
{
tableau[i] = malloc (n * sizeof (int));
}
on peut egalement initialiser les m fois n cases à 42:
for (int i = 0;i < m;i ++)
{
for (int k = 0;k < n; k ++)
{
tableau[i][k] = 42;
}
}
Don si tu veux faire une fonction qui créé et initialise un tableau
de "vl" à deux dimensions elle devrai ressembler à ça:
vl **creer_tableau (int max_x, int max_y);
Comment faire si on demande le nombre de points maximum à l'utilisateur, et que l'on désire regrouper l'ensemble des points dans un tableau ? En effet a-t-on le droit de faire
Dans tout les cas le mieux serait de faire un tableau de point et un tableau pour la couleur (RGB) en utilisant toujours un tableau de tableau ;)
Mais j'avoue que ne gérer qu'un tableau de structures me tente vraiment.
VL
Le Wed, 24 Dec 2003 00:54:47 +0100, Marc Lasson a écrit :
levasseur vincent wrote:
Bonjour tout le monde, Bonsoir,
Je cherche à initialiser un tableau en 2 dimenssion via une allocation dynamique de la mémoire.
Est-ce que ca veut dire que tu alloues un tableau PUIS que tu l'initialises ?
J'ai déclaré un pointeur
Tu as fait un "void *pointeur;" ?
dans ma blibliotheque "VL.h"
C'est un fichier d'entête.
et je voudrais donc dans une fonction type " void InitPointArray(vl_point *pointeur, int max_x, int max_y) ; ", le type vl_point est une structure.
Suis-je dans la bonne voie ? Ou dois-je utiliser une autre fonction pour creer ce tableau ?
Merci beaucoup
Bon, je n'ai pas tout bien compris, je vais essayer de répondre au mieux.
Tout d'abord, tout dépends de comment tu implémentes ton tableau dynamique à deux dimensions. En C, il éxiste un moyen fort commode, c'est de faire un tableau de tableau.
J'appellerais "tableau" dynamique, un pointeur vers une zone de mémoire contigüe.
ex un tableau de n int: int *tableau = malloc (n * sizeof (int)); qu'on peut initialiser à 42 : for (int i = 0;i < n;i ++) tableau[i] = 42;
Un tableau de m tableau de n int ca nous donnerai donc: int **tableau = malloc (m * sizeof (int *)); for (int i = 0;i < m; i ++) { tableau[i] = malloc (n * sizeof (int)); }
on peut egalement initialiser les m fois n cases à 42: for (int i = 0;i < m;i ++) { for (int k = 0;k < n; k ++) { tableau[i][k] = 42; } }
Don si tu veux faire une fonction qui créé et initialise un tableau de "vl" à deux dimensions elle devrai ressembler à ça: vl **creer_tableau (int max_x, int max_y);
Mais il existe d'autres façons de faire.
Marc Lasson
levasseur vincent wrote:
Bonjour tout le monde, Bonsoir,
Je cherche à initialiser un tableau en 2 dimenssion via une allocation dynamique de la mémoire.
Est-ce que ca veut dire que tu alloues un tableau PUIS que tu l'initialises ?
J'ai déclaré un pointeur
Tu as fait un "void *pointeur;" ?
dans ma blibliotheque "VL.h"
C'est un fichier d'entête.
et je voudrais donc dans une fonction type " void InitPointArray(vl_point *pointeur, int max_x, int max_y) ; ", le type vl_point est une structure.
Suis-je dans la bonne voie ? Ou dois-je utiliser une autre fonction pour creer ce tableau ?
Merci beaucoup
Bon, je n'ai pas tout bien compris, je vais essayer de répondre au mieux.
Tout d'abord, tout dépends de comment tu implémentes ton tableau dynamique à deux dimensions. En C, il éxiste un moyen fort commode, c'est de faire un tableau de tableau.
J'appellerais "tableau" dynamique, un pointeur vers une zone de mémoire contigüe.
ex un tableau de n int: int *tableau = malloc (n * sizeof (int)); qu'on peut initialiser à 42 : for (int i = 0;i < n;i ++) tableau[i] = 42;
Un tableau de m tableau de n int ca nous donnerai donc: int **tableau = malloc (m * sizeof (int *)); for (int i = 0;i < m; i ++) { tableau[i] = malloc (n * sizeof (int)); }
on peut egalement initialiser les m fois n cases à 42: for (int i = 0;i < m;i ++) { for (int k = 0;k < n; k ++) { tableau[i][k] = 42; } }
Don si tu veux faire une fonction qui créé et initialise un tableau de "vl" à deux dimensions elle devrai ressembler à ça: vl **creer_tableau (int max_x, int max_y);
Mais il existe d'autres façons de faire.
-- Marc.
levasseur vincent wrote:
Bonjour tout le monde,
Bonsoir,
Je cherche à initialiser un tableau en 2 dimenssion via une allocation
dynamique de la mémoire.
Est-ce que ca veut dire que tu alloues un tableau PUIS que tu
l'initialises ?
J'ai déclaré un pointeur
Tu as fait un "void *pointeur;" ?
dans ma blibliotheque "VL.h"
C'est un fichier d'entête.
et je voudrais donc dans une fonction type " void
InitPointArray(vl_point *pointeur, int
max_x, int max_y) ; ", le type vl_point est une structure.
Suis-je dans la bonne voie ? Ou dois-je utiliser une autre fonction pour
creer ce tableau ?
Merci beaucoup
Bon, je n'ai pas tout bien compris, je vais essayer de répondre au mieux.
Tout d'abord, tout dépends de comment tu implémentes ton tableau
dynamique à deux dimensions. En C, il éxiste un moyen fort commode,
c'est de faire un tableau de tableau.
J'appellerais "tableau" dynamique, un pointeur vers une zone de
mémoire contigüe.
ex un tableau de n int:
int *tableau = malloc (n * sizeof (int));
qu'on peut initialiser à 42 :
for (int i = 0;i < n;i ++)
tableau[i] = 42;
Un tableau de m tableau de n int ca nous donnerai donc:
int **tableau = malloc (m * sizeof (int *));
for (int i = 0;i < m; i ++)
{
tableau[i] = malloc (n * sizeof (int));
}
on peut egalement initialiser les m fois n cases à 42:
for (int i = 0;i < m;i ++)
{
for (int k = 0;k < n; k ++)
{
tableau[i][k] = 42;
}
}
Don si tu veux faire une fonction qui créé et initialise un tableau
de "vl" à deux dimensions elle devrai ressembler à ça:
vl **creer_tableau (int max_x, int max_y);
Je cherche à initialiser un tableau en 2 dimenssion via une allocation dynamique de la mémoire.
Est-ce que ca veut dire que tu alloues un tableau PUIS que tu l'initialises ?
J'ai déclaré un pointeur
Tu as fait un "void *pointeur;" ?
dans ma blibliotheque "VL.h"
C'est un fichier d'entête.
et je voudrais donc dans une fonction type " void InitPointArray(vl_point *pointeur, int max_x, int max_y) ; ", le type vl_point est une structure.
Suis-je dans la bonne voie ? Ou dois-je utiliser une autre fonction pour creer ce tableau ?
Merci beaucoup
Bon, je n'ai pas tout bien compris, je vais essayer de répondre au mieux.
Tout d'abord, tout dépends de comment tu implémentes ton tableau dynamique à deux dimensions. En C, il éxiste un moyen fort commode, c'est de faire un tableau de tableau.
J'appellerais "tableau" dynamique, un pointeur vers une zone de mémoire contigüe.
ex un tableau de n int: int *tableau = malloc (n * sizeof (int)); qu'on peut initialiser à 42 : for (int i = 0;i < n;i ++) tableau[i] = 42;
Un tableau de m tableau de n int ca nous donnerai donc: int **tableau = malloc (m * sizeof (int *)); for (int i = 0;i < m; i ++) { tableau[i] = malloc (n * sizeof (int)); }
on peut egalement initialiser les m fois n cases à 42: for (int i = 0;i < m;i ++) { for (int k = 0;k < n; k ++) { tableau[i][k] = 42; } }
Don si tu veux faire une fonction qui créé et initialise un tableau de "vl" à deux dimensions elle devrai ressembler à ça: vl **creer_tableau (int max_x, int max_y);
Mais il existe d'autres façons de faire.
-- Marc.
levasseur vincent
Bonjour,
Merci pour cette précision, qui me facilite les choses.
C'est assez difficile de bien choisir entre différents modes de représentation :-/
Pour la petite histoire, je vous pose tout ces questions car j'ai un projet en C/OpenGL à faire pour la fin de l'année. En faite j'essaye de comprendre comment je fais représenter une map en 3D. C'est un peu HS alors je ne vais pas m'étendre içi :)
Quand tu dis : "Dans la vrai vie le malloc échoue", qu'est-ce qui semble plus sur comme moyen ?
VL
Le Wed, 24 Dec 2003 16:04:02 +0100, Marc Lasson a écrit :
"sizeof (struct point_complet)" te donnera la taille de "struct point_complet".
et "sizeof *tableau" te donnera la taille du type que pointe tableau (ie. un "struct point_compet".
ton malloc devient alors : tableau = malloc (n * sizeof *tableau); ou tableau = malloc (n * sizeof (struct point_complet));
Le choix entre les deux reste une affaire de gout.
N'oublis pas que dans la vraie vie, les mallocs echouent.
Bonjour,
Merci pour cette précision, qui me facilite les choses.
C'est assez difficile de bien choisir entre différents modes de
représentation :-/
Pour la petite histoire, je vous pose tout ces questions car
j'ai un projet en C/OpenGL à faire pour la fin de l'année.
En faite j'essaye de comprendre comment je fais représenter
une map en 3D.
C'est un peu HS alors je ne vais pas m'étendre içi :)
Quand tu dis : "Dans la vrai vie le malloc échoue", qu'est-ce qui semble
plus sur comme moyen ?
VL
Le Wed, 24 Dec 2003 16:04:02 +0100, Marc Lasson a écrit :
Merci pour cette précision, qui me facilite les choses.
C'est assez difficile de bien choisir entre différents modes de représentation :-/
Pour la petite histoire, je vous pose tout ces questions car j'ai un projet en C/OpenGL à faire pour la fin de l'année. En faite j'essaye de comprendre comment je fais représenter une map en 3D. C'est un peu HS alors je ne vais pas m'étendre içi :)
Quand tu dis : "Dans la vrai vie le malloc échoue", qu'est-ce qui semble plus sur comme moyen ?
VL
Le Wed, 24 Dec 2003 16:04:02 +0100, Marc Lasson a écrit :