Bonsoir !
tout d'abord voici le code ayant un souci ...
dans le main j'appelle une fonction de cette maniere :
[cpp]
int** rempliAuto(int **tab, int t[26][2]);
int main()
{
int ** tab;
int t[26][2] = {0};
int a;
int i,n,j,k=0,l=1,m;
tab = (int**)malloc(26*sizeof(int*));
printf("Choisissez le mode de remplissage du tableau : \n");
printf("1: Manuel\n2: Automatique\n --> ");
scanf("%d",&a);
fflush(stdin);
switch(a)
{
case 1:
break;
case 2:
tab = rempliAuto(tab,t);
break;
default:
break;
}
return 0;
}
[/cpp]
voici maintenant le code de cette fonction :
[cpp]
int** rempliAuto(int **tab, int t[26][2])
{
int * ref;
int i,n,j,k,l=1,m, z;
int * p;
srand(time(NULL));
ref = (int*)malloc(sizeof(int));
for(i=0; i<26; i++)
{
t[0] = i;
printf("\nPassage numero : %d", i);
n = 1+(rand()%4);
printf("\n n vaut %d",n);
t[1] = n;
tab = (int*)malloc(n*sizeof(int));
for(j=0; j<n; j++)
{
p = realloc(ref,(sizeof(ref)+sizeof(int)));
do
{
z = 0;
k = 1+(rand()%104);
printf("\n k vaut %d",k);
for(m=0; m<l; m++)
{
if(k == p[m])
{
z = 1;
printf("\n k est deja util");
}
}
}
while(z == 1);
p[l-1] = k;
l++;
ref = p;
printf("\n i vaut %d et j vau %d",i,j);
tab[j] = k;
}
}
printf("\n sortie 1\n");
free(p);
free(ref);
return tab;
}[/cpp]
Deux cas s'offre à moi :
-Soit je ne met pas l'instruction tab[j] = k; , dans ce cas la fonction ne pose pas de problème, mais le programme plante dans le main lorsque je tente d'afficher les valeurs du tableau.
-Soit cette instruction est présente et le programme plante à un moment dans la fonction, généralement quand i atteint 20 21 22.
Quelqu'un aurait-il une solution à me proposer ?
Merci d'avance =)
tout d'abord voici le code ayant un souci ...
dans le main j'appelle une fonction de cette maniere :
[cpp]
int** rempliAuto(int **tab, int t[26][2]);
int main()
{
int ** tab;
int t[26][2] = {0};
int a;
int i,n,j,k=0,l=1,m;
tab = (int**)malloc(26*sizeof(int*));
printf("Choisissez le mode de remplissage du tableau : \n");
printf("1: Manuel\n2: Automatique\n --> ");
scanf("%d",&a);
fflush(stdin);
switch(a)
{
case 1:
break;
case 2:
tab = rempliAuto(tab,t);
break;
default:
break;
}
return 0;
}
[/cpp]
voici maintenant le code de cette fonction :
[cpp]
int** rempliAuto(int **tab, int t[26][2])
{
int * ref;
int i,n,j,k,l=1,m, z;
int * p;
srand(time(NULL));
ref = (int*)malloc(sizeof(int));
for(i=0; i<26; i++)
{
t[0] = i;
printf("\nPassage numero : %d", i);
n = 1+(rand()%4);
printf("\n n vaut %d",n);
t[1] = n;
tab = (int*)malloc(n*sizeof(int));
for(j=0; j<n; j++)
{
p = realloc(ref,(sizeof(ref)+sizeof(int)));
do
{
z = 0;
k = 1+(rand()%104);
printf("\n k vaut %d",k);
for(m=0; m<l; m++)
{
if(k == p[m])
{
z = 1;
printf("\n k est deja util");
}
}
}
while(z == 1);
p[l-1] = k;
l++;
ref = p;
printf("\n i vaut %d et j vau %d",i,j);
tab[j] = k;
}
}
printf("\n sortie 1\n");
free(p);
free(ref);
return tab;
}[/cpp]
Deux cas s'offre à moi :
-Soit je ne met pas l'instruction tab[j] = k; , dans ce cas la fonction ne pose pas de problème, mais le programme plante dans le main lorsque je tente d'afficher les valeurs du tableau.
-Soit cette instruction est présente et le programme plante à un moment dans la fonction, généralement quand i atteint 20 21 22.
Quelqu'un aurait-il une solution à me proposer ?
Merci d'avance =)