probleme de C - Programmation
Marsh Posté le 15-12-2001 à 14:43:53
C quoi exactement le pb ?
Tu n'alloues qu'une partie de tab là....
(Un pointeur de pointeur de pointeur sur char ? ça va te servir à quoi ça ? )
Marsh Posté le 15-12-2001 à 14:46:23
bon alors je m'explique c un petit morceau de prog qui se reouve dans un appel a une fonction, d'ou le ***.
Ensuite cela plante sur la ligne du malloc t je ne comprend pas pourqoui!
Marsh Posté le 15-12-2001 à 16:19:15
Hug ! Homme voulant programmer en C. Trève de plaisenterie....
Le probleme est simple : tu veux allouer de la memoire à *tab alors que celui ci n'existe pas !!!! Un exemple pour mieux comprendre :
void main(void)
{
char ***tab;
tab = malloc(i * sizeof(char*));
if (tab == NULL)
{
printf("Probleme d'allocation" );
exit(1);
}
}
J ai pas testé mais ca devrais marcher.
Ensuite tu pourras faire
*tab = malloc(j * sizeof(char*));
**tab = malloc(k * sizeof(char*));
et ainsi de suite ....
J'espere avoir été clair
Marsh Posté le 15-12-2001 à 16:55:11
en fait tab est un tableau a 2d mais comme je veut le moifier dans une fonction je le passe en triple pointeur, c tout. Ici je l'ai mit dans la main pour simplifier tout, mais le probleme reste le meme je ne veut pas allouer de la mem pour tab mais pour *tab!
Marsh Posté le 15-12-2001 à 16:56:18
magot a écrit a écrit : en fait tab est un tableau a 2d mais comme je veut le moifier dans une fonction je le passe en triple pointeur, c tout. Ici je l'ai mit dans la main pour simplifier tout, mais le probleme reste le meme je ne veut pas allouer de la mem pour tab mais pour *tab! |
Pour modif un tableau dans une fonction tu n'as pas besoin de le repasser en pointeur ! Un tableau est déjà un pointeur !
Marsh Posté le 15-12-2001 à 17:05:07
effectivement, le nom du tableau est deja un pointeur sur le 1er element de ce tableau
Marsh Posté le 15-12-2001 à 18:00:00
ex :
void changetab(int tab[][]) {
tab[0][1] = 2;
}
void main()
{
int tab[][];
//allocation
....
changetab(tab);
}
aprés appel tab[0][1] = 2
Marsh Posté le 17-12-2001 à 09:45:06
[SDF]Poire a écrit a écrit : ex : void changetab(int tab[][]) { tab[0][1] = 2; } void main() { int tab[][]; //allocation .... changetab(tab); } aprés appel tab[0][1] = 2 |
fonction main toujours retourner int
plus grave, c'est quoi cette déclaration ? "int tab[][];" ça ne fonctionne pas ce genre de truc
dans tes déclarations de variables:
tu peux mettre "int tab[]" à condition que tu fasses immédiatement une initialisation
int main()
{
int tab[] = {10, 11, 12, 13};
...
mais à moins que le C "iso 90" soit radicalement différent du ANSI C, je crois bien que ta déclaration ne fonctionne pas...
dans tes définitions de paramètres :
"int tab[]" équivalent à "int *tab" à condition que t'initialise tout de suite derrière
mais
"int tab[][]" équivalent à "je veux une syntax error"
la règle, pour les définitions des paramètres, tu peux ommettre la première dimension, mais les autres sont nécessaires pour calculer les adresses...
Pour le pb de magot, j'adhère tout à fait à ce qu'a dit MrTonio, mais j'utiliserai un simple char*
int main()
{
char *tab;
/* je veux un tableau x * y */
if ( (tab = (char *)malloc(x*y)) == NULL )
{
perror("Pb init tab" );
return(1);
}
...
/* je veux accèder à l'élément ligne i, colonne j */
tab[i*y+j] = machin_truc;
...
}
Et hop, no problemo
Mogi.
Marsh Posté le 17-12-2001 à 09:48:27
mogi a écrit a écrit : ... dans tes définitions de paramètres : "int tab[]" équivalent à "int *tab" à condition que t'initialise tout de suite derrière |
n'importe quoi, l'autre euh, c'est un mauvais copier-coller, il fallait lire
dans tes définitions de paramètres :
"int tab[]" équivalent à "int *tab"
désolé,
Mogi.
Marsh Posté le 17-12-2001 à 15:15:52
mogi a écrit a écrit : n'importe quoi, l'autre euh, c'est un mauvais copier-coller, il fallait lire dans tes définitions de paramètres : "int tab[]" équivalent à "int *tab" désolé, Mogi. |
Mon main je lui fais renvoyer ce que je veux....
Scuse pour le int tab[][]... j'étais un peu fatigué... je voulais dire int * *tab ou int tab[10][10] par ex....
Marsh Posté le 30-12-2001 à 16:15:23
Reply
Marsh Posté le 15-12-2001 à 14:32:14
Bonjour st ce que qqun pourrait me dire pourquoi ce petiti bout de prg ne marche pas???
void main(void)
{
char ***tab=NULL;
int k=0,t=0, i=16;
if( (*tab = (char**)malloc(i*sizeof(char*))) == NULL )
{
printf("Probleme d'allocation" );
exit(1);
}
}
je sais que cela ne sert a rien mais je voudrai tout de meme le faire marcher..
merci