#1 Le 27/09/2014, à 17:23
- quentino18
[Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.
Bonjour,
J'ai vu pas mal de choses sur les tableaux , notamment le remplissage préalable ou avec le découpage d'un autre tableau , mais je n'arrive pas a l'adapter a mon problème : j'essaye de créer 2 tableaux séparés puis de les concaténer dans un 3ème , ligne par ligne ( donc en 2 dimensions dans le cas de 2 tableaux).
Tout ce que j'essaye se conclut systématiquement par des erreurs de segmentation ...
Je vous poste mon code , si j'ai le droit a des indices ...
#include <stdio.h>
#include <stdlib.h>
int main ()
{
#define taille 2
int *tab1, *tab2, **tab3;
int i,t[taille];
printf("taille tableau 1 =");
scanf("%i", &t[0]);
tab1 = (int*)malloc(t[0]*sizeof(int));
for (i=0;i<t[0];i++)
{
printf("tab1[%i] = ",i);
scanf("%i",&tab1[i]);
}
printf("taille tableau 2 =");
scanf("%i", &t[1]);
tab2 = (int*)malloc(t[1]*sizeof(int));
for (i=0;i<t[1];i++)
{
printf("tab2[%i] = ",i);
scanf("%i",&tab2[i]);
}
tab3 = (int**)malloc(2*sizeof(int*));
//???????????
return 0;
}
Merci d'avance .
Dernière modification par quentino18 (Le 27/09/2014, à 19:10)
Hors ligne
#2 Le 27/09/2014, à 18:21
- pingouinux
Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.
Bonsoir,
Je pense qu'il faut faire ceci :
tab3 = (int**)malloc(2*sizeof(int*));
for(i=0;i<taille;i++)
{
tab3[i]=(int*)malloc(t[i]*sizeof(int));
}
Hors ligne
#3 Le 27/09/2014, à 18:28
- quentino18
Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.
d'accord , donc je peut pas pointer directement dessus genre :
tab3[i]=tab2
Il faut redéfinir tab3 comme tu l'as fait et réassocier une a une chaque valeur des tableaux précédents , c'est ça ?
Hors ligne
#4 Le 27/09/2014, à 18:32
- pingouinux
Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.
Ah si, ce que tu proposes doit être possible, mais il faut voir ce que tu fais ensuite. Peux-tu montrer le programme qui plante ?
Ajouté :
C'est bien ça que tu as fait ?
tab3[0]=tab1;
tab3[1]=tab2;
Dernière modification par pingouinux (Le 27/09/2014, à 18:34)
Hors ligne
#5 Le 27/09/2014, à 18:37
- quentino18
Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.
Exactement , c'est censé marcher ?
Dès que je rentre la dernière valeur de mon deuxième tableau , j'ai core dumped...
J'ai essayé en faisant ce que je viens de dire , et j'ai pareil :
#include <stdio.h>
#include <stdlib.h>
int main ()
{
#define taille 2
int *tab1, *tab2, **tab3;
int i,t[taille];
printf("taille tableau 1 =");
scanf("%i", &t[0]);
tab1 = (int*)malloc(t[0]*sizeof(int));
for (i=0;i<t[0];i++)
{
printf("tab1[%i] = ",i);
scanf("%i",&tab1[i]);
}
printf("taille tableau 2 =");
scanf("%i", &t[1]);
tab2 = (int*)malloc(t[1]*sizeof(int));
for (i=0;i<t[1];i++)
{
printf("tab2[%i] = ",i);
scanf("%i",&tab2[i]);
}
tab3 = (int**)malloc(2*sizeof(int*));
for(i=0;i<taille;i++)
{
tab3[i]=(int*)malloc(t[i]*sizeof(int));
}
for(i=0;i<t[1];i++)
tab3[0][i] = tab1[i] ;
for(i=0;i<t[2];i++)
tab3[1][i] = tab2[i] ;
return 0;
}
Edit : dans les deux cas , j'ai :
taille tableau 1 =3
tab1[0] = 1
tab1[1] = 2
tab1[2] = 3
taille tableau 2 =3
tab2[0] = 1
tab2[1] = 2
tab2[2] = 3
Erreur de segmentation ( core dumped)
Dernière modification par quentino18 (Le 27/09/2014, à 18:46)
Hors ligne
#6 Le 27/09/2014, à 18:44
- pingouinux
Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.
for(i=0;i<t[1];i++) tab3[0][i] = tab1[i] ; for(i=0;i<t[2];i++) tab3[1][i] = tab1[i] ;
Dans les 2 commandes for, les indices de t doivent être respectivement 0 et 1.
Ajouté : D'ailleurs, à mon avis, ces 2 boucles sont inutiles, tab3[0] et tab1 pointant sur la même chose
Dernière modification par pingouinux (Le 27/09/2014, à 19:12)
Hors ligne
#7 Le 27/09/2014, à 19:10
- quentino18
Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.
ahh oui ... mince , j'ai pas fait assez attention aux indices :-)
Tu as donc résolu mon problème
J'ai finalement :
#include <stdio.h>
#include <stdlib.h>
int main ()
{
#define taille 2
int *tab1, *tab2, **tab3;
int i,t[taille];
printf("taille tableau 1 =");
scanf("%i", &t[0]);
tab1 = (int*)malloc(t[0]*sizeof(int));
for (i=0;i<t[0];i++)
{
printf("tab1[%i] = ",i);
scanf("%i",&tab1[i]);
}
printf("taille tableau 2 =");
scanf("%i", &t[1]);
tab2 = (int*)malloc(t[1]*sizeof(int));
for (i=0;i<t[1];i++)
{
printf("tab2[%i] = ",i);
scanf("%i",&tab2[i]);
}
tab3 = (int**)malloc(2*sizeof(int*));
for(i=0;i<taille;i++)
{
tab3[i]=(int*)malloc(t[i]*sizeof(int));
}
tab3[0]=tab1;
tab3[1]=tab2;
for(i=0;i<t[0];i++)
printf("%d ",tab3[0][i]);
printf("\n");
for(i=0;i<t[1];i++)
printf("%d ",tab3[1][i]);
printf("\n");
return 0;
}
Et mon Beau tableau qui s'affiche a la fin .
Merci Beaucoup. :-)
Dernière modification par quentino18 (Le 27/09/2014, à 19:12)
Hors ligne
#8 Le 27/09/2014, à 19:13
- pingouinux
Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.
J'ai complété mon message #6.
Ajouté : Tu peux aussi supprimer ceci
for(i=0;i<taille;i++)
{
tab3[i]=(int*)malloc(t[i]*sizeof(int));
}
Dernière modification par pingouinux (Le 27/09/2014, à 19:19)
Hors ligne
#9 Le 27/09/2014, à 19:37
- quentino18
Re : [Résolu] [Débutant]-Remplisage Tableaux multidimensionels en C.
Parfait :-)
Hors ligne