Allocation dynamique de tableu 2D

potitmarron Messages postés 2 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 11 janvier 2011 - 10 janv. 2011 à 18:06
potitmarron Messages postés 2 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 11 janvier 2011 - 11 janv. 2011 à 15:59
Bonjour,
J'aimerais savoir comment en C je peux créer un tableau et au fur et à mesure de mes besoins, ajouter des lignes ?
Ici j'ai un tableau de x lignes et de 5 colonnes. Quand ma fonction test me renvoie 1 je veux sauvegarder tab[nouvelleligne][premièrecolonne] = i et tab[nouvelleligne][deuxièmecolonne] = j. (j'utiliserais les autres colonnes une fois mon problème compris).

int ** tab;
int point = 0;
int nbligne = 0;

 for(int i=0; i<rows; i++){
for( int j=0; j<cols; j++){
point = test(inputBIN,j,i,cols,rows);		
if(point==1){ // si point valide j'ajoute une ligne dans le tableau
    tab = (int **) malloc(sizeof(int*)*nbtrab);
    if (tab != NULL){   
for (int heu = 0; heu < nbligne; heu++){ 
    tab[heu] = NULL;
}
for ( int ligne=0 ; ligne < nbligne ; ligne++){ 
    tab[ligne] = (int *) malloc (sizeof (int)*5);
}
    if (tab[nbligne] != NULL){
tab[nbligne][0] = i;
tab[nbligne][1] = j;

    }
 
    }
  nbligne++;

    }
}
    }

    for (int ligne = 0 ; ligne < nblignes; ligne++){
free (tab[ligne]), tab[ligne] = NULL;
    }
free (tab), tab = NULL;


Merci de votre aide.

2 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
11 janv. 2011 à 01:42
salut,

Il est impossible d'agrandir un tableau sans réallouer l'ensemble. Soit tu alloue le maximum et tu libère ce qui est en trop après traitement soit tu réalloue (pas malloc() mais realloc()) à chaque fois soit il faut utiliser les listes.

@++
0
potitmarron Messages postés 2 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 11 janvier 2011
11 janv. 2011 à 15:59
Ok, dommage mais merci pour l'info.
0
Rejoignez-nous