Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
6031 connectés 

 


Dernière réponse
Sujet : probleme de C
max2048 Allô ? Jean-Perrin ? :D

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
max2048 Allô ? Jean-Perrin ? :D
[SDF]Poire

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....
 :hello:

mogi

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.

mogi

[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  




 
:gun:
 
fonction main toujours retourner int :)
 
:ouch:
 
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.

[SDF]Poire ex :
 
void changetab(int tab[][]) {
  tab[0][1] = 2;
}
 
void main()
{
  int tab[][];
 
  //allocation  
  ....
  changetab(tab);
}
 
aprés appel tab[0][1] = 2
godbout effectivement, le nom du tableau est deja un pointeur sur le 1er element de ce tableau
[SDF]Poire

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 !

magot 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!
MrTonio 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 :D
magot 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!
[SDF]Poire 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 ? :pt1cable: )
 :hello:
magot 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

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)