cs_Babar51
Messages postés3Date d'inscriptionjeudi 27 juin 2002StatutMembreDernière intervention17 janvier 2006
-
17 janv. 2006 à 03:05
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 2013
-
23 janv. 2006 à 11:42
voila je cherche a modifié une entrée dans un tableau a 2 dimension en C ... j ai essayé le code suivant mais je n obtien que des echec ... en bon debutant je solicite votre aide :)
void Cap_mID(int *CapInfo[50][5],int id, int nvoid)
{
*CapInfo[Cap_chID(&CapInfo,id)][0]= nvoid;
}
int Cap_chID(int CapInfo[50][5], int id)
{
int i=0;
while (Cap_ID(CapInfo,i)!=id) i++;
return i;
}
si quelqu'un pourrai m expliqué comment corrigé se code pour qu il fonctionne cela m arrangerai beaucoup
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 18 janv. 2006 à 11:45
Salut,
Normalement c'est interdit de passer un tableau en parametre. Il y a une legere difference entre la declaration d'un tableau et celle d'un pointeur sur pointeur. Comme tu n'a pas le droit de passer un tableau en parametre, tu n'a pas le droit de definir sa taille :
int **CapInfo //et non int CapInfo[50][5]
Quand tu declare un pointeur sur pointeur, tu declare en fait plusieur chose
un pointeur sur pointeur qui ponte sur un tableau contenant lui-meme des pointeurs vers le type désiré.
//Declaration et allocation du tableau de pointeur
//Il doit faire la taille du nombre de ligne
int **CapInfo = (int*) malloc(50*sizeof(int*));
//Initialisation du tableau de pointeur
int i = 0;
while(i < 50)
{
//Allocation de chaque colonne du tableau
CapInfo[i] = (int) malloc(5*sizeof(int));
i++;
}
Et seulement maintenant tu as le droit de faire CapInfo[10][3] = 20;
Tu peux aussi, maintenant que le tableau de pointeur pointe au bon endroit, le passer en parametre.
C'est de l'allocation dynamique, donc tu DOIS ABSOLUMENT penser a désallouer avant que ton programme se termine :
//Desallocation des colonnes
int i = 0;
while(i < 50)
{
free(CapInfo[i]);
}
//Desallocation des lignes
free(CapInfo);
Le travail c'est la santé, ne rien faire c'est la préservé !!!
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 23 janv. 2006 à 11:42
Petite precision :
int *Capinfo[]; // Normalement interdit en C
Il manque une taille de tableau ou une liste d'initialisation. Le compilateur ne peut donc pas savoir la taille du tableau de pointeur a allouer. Cette declaration est valable uniquement pour char *argv[] dans le main dans la mesure ou c'est le system qui fixe la taille maximale du parametre. La taille n'est donc pas a specifier puisque le system la connait.