Ca marche mais lorsque je demande d'afficher tout le tableau, je n'obtiens pas une matrice. Pire, toutes les valeurs ne s'affiche pas. Comment faire svp?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include"jeudelavie.h"
int main()
{
int i,j;
Grille matrice;
matrice.tab=(int**)malloc(3 * sizeof(int*));
for(i=0;i<3;i++)
{
/*allocation d'un tableau de tableau*/
matrice.tab[i]= (int *) calloc ( 3, sizeof(int) );
}
/*remplissage d'une matrice diagonale*/
matrice.tab[0][0]=1;
matrice.tab[0][1]=2;
matrice.tab[1][0]=3;
matrice.tab[1][1]=4;
for (i=0;i<3;i++)
{
for(j=1;j<3;j++)
{
printf("%d\n", matrice.tab[i][j]);
}
}
return 0;
}
Si mais tu as rééditer ton message plus vite. Ca marche niquel
Il y a un autre soucis, tout à l'heure j'ai affecté les valeurs que je souhaitais mettre dans le tableau 2D.
Maintenant je chercher à ce que le tableau 2D se remplisse tout seul. je fais donc 2 boucles, une pour remplir les lignes et une autre pour les colonnes. Seulement là ça ne marche pas. pouvez m'aider svp?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include"jeudelavie.h"
#include<time.h>
int MORT=0, VIE=1;
int main()
{
/* Permet de générer un nombre aléatoire compris entre MAX et MIN//
const int MAX=100; int MIN=3;
srand(time(NULL));
nombrealeatoire=( rand() % (MAX-MIN+1))+MIN;*/
int i,j,b;
Grille matrice;
//pour créer un tableau dynamique à 2 dimensions
matrice.tab=(int**)malloc(b * sizeof(int*));
for(i=0;i<3;i++)
{
/*allocation d'un tableau de tableau*/
matrice.tab[i]= (int *) calloc (b , sizeof(int) );
}
printf("ok");
matrice=creergrille();
return 0 ;
}
Grille creergrille()
{
int i,j;
Grille matrice;
//tableau dynamique à 2 dimensions de taille matrice.taille
matrice.tab=(int**)malloc(matrice.taille * sizeof(int*));
for(i=0;i<3;i++)
{
/*allocation d'un tableau de tableau*/
matrice.tab[i]= (int *) calloc (matrice.taille , sizeof(int) );
}
const int MAX=100; int MIN=3;
srand(time(NULL));
int nombrealeatoire=( rand() % (MAX-MIN+1))+MIN;
printf("Saisir la taille de ma grille\n");
scanf("%d",&matrice.taille);
//initialisation aléatoire
for (i=0; i<matrice.taille; i++)
{
for(j=0; j<matrice.taille; j++)
{
nombrealeatoire=( rand() % (MAX-MIN+1))+MIN;
matrice.tab[i][j]=nombrealeatoire;
}
}
return matrice;
}
Dès que je supprime la dernière boucle, il n'y a plus de segmentation fault
Forcément, là, tu changes la taille de ta matrice entre son allocation et son parcours, donc la matrice que tu ârcours, n'a pas la même taille que celle que tu alloues...
tes lignes 48 49 devraient être au début de ta fonction.
Sinon, deux remarques:
pourquoi allouer deux matrices?
en l'occurence, tu a des méchantes fuites mémoires...
/* fonction permet de créer et remplir un tableau de deux dimention*/
int** remplir(int n )
{
int **m,i,j,x ;
m=(int**) malloc (n*sizeof(int*)) ;
for (i=0 ; i<n ;i++)
m[i]= malloc (n*sizeof(int)) ;
for (i=0 ; i<n ;i++)
{ for (j=0 ; j<n ;j++)
{ printf("donner M[%d][%d]",i,j) ;
scanf ("%d",&x) ;
m[i][j]= x ;
}
}
return m;
}
\\by hamma khadraoui
Pourquoi caster un malloc et pas l'autre, ou les deux, ou bien aucun ??
remplir un tableau dynamique à deux dimensions
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html