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

  FORUM HardWare.fr
  Programmation

  probleme de C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de C

n°81709
magot
Posté le 15-12-2001 à 14:32:14  profilanswer
 

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

mood
Publicité
Posté le 15-12-2001 à 14:32:14  profilanswer
 

n°81712
[SDF]Poire
Vive Grumly
Posté le 15-12-2001 à 14:43:53  profilanswer
 

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:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°81713
magot
Posté le 15-12-2001 à 14:46:23  profilanswer
 

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!

n°81740
MrTonio
Posté le 15-12-2001 à 16:19:15  profilanswer
 

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


---------------
WoIP - Video and Voice over IP -  http://www.woip.net/
n°81749
magot
Posté le 15-12-2001 à 16:55:11  profilanswer
 

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!

n°81751
[SDF]Poire
Vive Grumly
Posté le 15-12-2001 à 16:56:18  profilanswer
 

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 !


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°81756
godbout
Génial.
Posté le 15-12-2001 à 17:05:07  profilanswer
 

effectivement, le nom du tableau est deja un pointeur sur le 1er element de ce tableau


---------------
Super.
n°81772
[SDF]Poire
Vive Grumly
Posté le 15-12-2001 à 18:00:00  profilanswer
 

ex :
 
void changetab(int tab[][]) {
  tab[0][1] = 2;
}
 
void main()
{
  int tab[][];
 
  //allocation  
  ....
  changetab(tab);
}
 
aprés appel tab[0][1] = 2


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°82021
mogi
Posté le 17-12-2001 à 09:45:06  profilanswer
 

[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.

n°82023
mogi
Posté le 17-12-2001 à 09:48:27  profilanswer
 

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.

mood
Publicité
Posté le 17-12-2001 à 09:48:27  profilanswer
 

n°82147
[SDF]Poire
Vive Grumly
Posté le 17-12-2001 à 15:15:52  profilanswer
 

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:

n°84986
max2048
Begin The Begin
Posté le 30-12-2001 à 16:15:23  profilanswer
 

Allô ? Jean-Perrin ? :D


---------------
Un site web qu'il est beau (v2.0)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  probleme de C

 

Sujets relatifs
[PHP] re probleme PHP sessionprobleme de module
[C] Problème à deux francs avec sprintfProbleme de Logique Mathemathiques Y a des Matheux ici ?
Phorum 3.3 -> Problème SearchProblème avec phpmynews...
[javascript] probleme avec un cc dans un mailto[mysql++/VC++6.0/MFC] probleme de linkage !!! urgent !!!
Probleme addslashes, stripslashes ?[PHP ]probleme avec les cookies
Plus de sujets relatifs à : probleme de C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR