|
|
|
|
Bonjour,
J'aurais besoin d'aide parce que je n'arrive pas à reallocer un tableau deux dimensions. Mon tableau a un nombre de ligne qui évolue et trois colonnes.
Voila mon code :
float **tab;
int i;
tab = (float**)malloc( 1*sizeof(float*) );
for (i=0 ; i<1 ; i++){
tab[i] = (float*)malloc( 3*sizeof(float) );
}
tab = (float**)realloc( tab, N*sizeof(float*) );
for (i=0 ; i<N ; i++){
tab[i] = (float*)realloc( tab, 1*sizeof(float) );
}
Configuration: Windows XP Internet Explorer 7.0
Bonjour,
float **tab;
int i;
tab = (float**)malloc( 1*sizeof(float*) );
for (i=0 ; i<1 ; i++)
{
tab[i] = (float*)malloc( 3*sizeof(float) );
}
tab = (float**)realloc( tab, N*sizeof(float*) );
// allouer les nouvelles colonnes.
for (i=1 ; i<N ; i++)
{
tab[i] = (float*)malloc( 3*sizeof(float) );
}
Au final il faudra une deuxième variable pour la taille, désallouer si la nouvelle est plus petite, allouer si elle est plus grande que l'ancienne.. Ou alors (si je n'ai pas perçu ton intérêt)
float **tab;
int i;
tab = (float**)malloc( 1*sizeof(float*) );
for (i=0 ; i<1 ; i++)
{
tab[i] = (float*)malloc( 3*sizeof(float) );
}
tab = (float**)realloc( tab, N*sizeof(float*) );
for (i=0 ; i<N ; i++)
{
tab[i] = (float*)realloc( tab + i, 3*sizeof(float) ); // On ré-alloue bien ici la colonne et non tab et bien des colonnes de 3 float et non 1.
}
Ca marche comme cela ? M. |
Bonjour
int nbSource=20;
char ***listeSource=NULL;
listeSource = malloc (nbSource * sizeof *listeSource);
for (i=0;i<nbSource;i++)
listeSource[i]=malloc(2*nbMot * sizeof *listeSource[i]);
for (i=0;i<nbSource;i++)
for (j=0;j<2*nbMot;j++)
listeSource[i][j]=malloc(lgMot+1 * sizeof *listeSource[i][j]);
Merci du coup de main.
|
Merci pour ta réponse et pour la remarque sur la parenthèse oubliée.
nbSource++;
listeSource = realloc (listeSource, nbSource * sizeof *listeSource);
for (i=0;i<nbSource;i++)
listeSource[i]=realloc(listeSource[i],2*nbMot * sizeof *listeSource[i]);
for (i=0;i<nbSource;i++)
for (j=0;j<2*nbMot;j++)
listeSource[i][j]=realloc(listeSource[i][j],(lgMot+1) * sizeof *listeSource[i][j]);
Merci de me relever mes erreurs. |
Le principe est bon.
nbSource++;
listeSource = realloc (listeSource, nbSource * sizeof *listeSource);
listeSource[nbSource]=malloc(2*nbMot * sizeof *listeSource[i]);
for (j=0;j<2*nbMot;j++)
listeSource[nbSource][j]=malloc( (lgMot+1) * sizeof *listeSource[nbSource][j]);
N'oublie pas de vérifier aussi la valeur de retour de l'allocation. Si pour une raison quelconque elle renvoyait NULL t'aurais du mal à comprendre certains segfaults. Google is your friend |
Merci fiddy.
nbSource++;
listeSource = realloc (listeSource, nbSource * sizeof *listeSource);
listeSource[nbSource-1]=malloc(2*nbMot * sizeof *listeSource[i]);
for (j=0;j<2*nbMot;j++)
listeSource[nbSource-1][j]=malloc( (lgMot+1) * sizeof *listeSource[nbSource-1][j]);
|