Allocation de mémoire dynamique

clmercutio Messages postés 12 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 5 août 2009 - 27 mai 2007 à 17:41
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 - 27 mai 2007 à 20:38
Hello, je me permet d'appeller a l'aide car je deviens fou. J'ai 2 ou 3 questions.

Premierement, j'ai réalise un kakuro comme projet, pour la premiere
version je travaille sur un tableau statique, ce qui était bien facile.

Maintenant, je dois travailler sur un tableau dynamique dont la taille
du tableau est définie en lecture dans un fichier annexe. Lire la
taille ne me pose pas de problème en soi. C'est la suite qui me pose
problème, les fonctions de chargement de fichier et d'affichage du
tableau sont séparées. Comment faire pour passer la taille en lue dans
mon fichier en borne pour l'affichage de mon tableau. Précedent, j'ai
fais un #define des mes bornes, c'est a dire x=9 et y=9 pour avoir un
tableau de 9 sur 9. Ici comme je lis la taille de mon tableau au niveau
du chargement de ma grille, comment repécurer la taille sur mon
affichage pour qu'il change automatique les bornes. Et ou alloué la
mémoire de mon tableau, dans le main() alors je dois retourner mon
nombre de ligne et de colonne dans le main de la meme manière tout en
continuant mon chargement de fichiers ou puis -je directement alloué ma
mémoire dans ma fonction de chargement. J'ai essayé tellement de chose
que je ne suis plus quoi faire. Si jamais ce n'est pas explicite ce que
je raconte, merci de me contacté sur clmercutio@hotmail.com pour plus
de renseignement. Merci a tous.

3 réponses

The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
27 mai 2007 à 18:30
Salut,

Il faut deja enlever tes #define
maintenant, chaque fonction utilisera en parametre la taille du tableau
 ou au pire tu peux mettre une variable globale mais c'est pas genial
puis, pour allouer ton tableau, au lieu d'avoir un int tableau[X][Y];
 il faut faire comme cela:
 int ** tableau;
tableau = (int **)malloc(Y*sizeof(int *));
for (i=0; i<Y; i++) { tableau[i] = (int *)malloc(X*sizeof(int)); }
y'a d'autres manieres de faire forcement, mais celle la marche

=
0
clmercutio Messages postés 12 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 5 août 2009
27 mai 2007 à 20:05
Je l'ai fais comme cela j'ai bien ma grille complete mais le problème c'est que je n'ai rien qui s'affiche dans mes cases et c'est bien ca le problèmes. Mais je suis parti sur un pointeur de pointeur comme tu le mets. Petite info, juste pour voir si je me trompe pas voici ma déclaration
ma structure :
type struct element
{
    char type;
    int val[2];
    int attrib;
}grille;
et dans mon main je utilise ma structure
int main()
    int i=0
    grille **tab;
    tab=(grille **)malloc(nbl*sizeof(grille *)); // nbl : nombre de ligne
    while(i<nbc) // nbc : nombre de colonne
    {
       tab[i]=(grille *)malloc(nbc*sizeof(grille))
    }
Est-ce que cette syntaxe est la bonne, l'allocation de mémoire comme ecrite ne se fait pas dans le main mais dans une autre fonction, est-ce que cela est correct?
0
The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
27 mai 2007 à 20:38
RE

Oui ca a l'air correct sauf le i++

=
0
Rejoignez-nous