[C] Probleme d'allocation

Probleme d'allocation [C] - C - Programmation

Marsh Posté le 17-05-2004 à 20:00:27    

voila j'ai un probleme avec mon allocation dynamique
 
j'ai créé une fonction qui doit pouvoir remplir une "case" d'un tableau dynamique et je me retrouve avec des erreur et je n'arrive pas a savoir d'ou elles proviennent
 
 

Code :
  1. struct _globale ajouterElement(struct _structForme formeActuelle,struct _globale elementAjoute)
  2. {
  3.   struct _globale tmp;
  4.   tmp=(struct _globale*)malloc(sizeof(struct _globale));
  5.   if(tete==NULL)
  6.     {
  7.       elementAjoute.suivant=NULL;
  8.       elementAjoute.precedent=NULL;
  9.       tete=elementAjoute;
  10.       queue=elementAjoute;
  11.       courant=elementAjoute;
  12.       tmp->maForme=affectation(formeActuelle);
  13.     }
  14.   else
  15.     {
  16.       elementAjoute.suivant=NULL;
  17.       elementAjoute.precedent=queue;
  18.       queue.suivant=elementAjoute; 
  19.       queue=elementAjoute;
  20.       tmp->maForme=affectation(formeActuelle);
  21.          
  22.     }
  23.   return tmp;
  24. }


 
 
 
je me retrouve notamment avec une erreur a la ligne ou se situe les "malloc"  qui est je cite"error: incompatible types in assignment"
 
de plus les "->" comporte une erreur  "error: invalid type argument of `->'"
 
 
je joint les en tete de structure _globale et _structForme
 
 

Code :
  1. typedef struct _structForme
  2. {
  3.   int type_de_la_forme;
  4.   int remplir;
  5.   union _forme forme_figure;
  6. }structForme;
  7. typedef struct _globale
  8. {
  9.   struct _structForme maForme;
  10.   struct _globale *suivant;
  11.   struct _globale *precedent;
  12. }globale;


 
 
voila j'espere n'avoir rien oublié de précise
 
merci de vos reponses

Reply

Marsh Posté le 17-05-2004 à 20:00:27   

Reply

Marsh Posté le 17-05-2004 à 20:04:16    

ebn au niveau des types, ton code est mauvais, voilà tout

Reply

Marsh Posté le 17-05-2004 à 20:05:38    

aide détaillée svp !!!!!!!!!!!!

Reply

Marsh Posté le 17-05-2004 à 20:17:45    

Peux tu m'aider a corriger STP TAZ ????
 
Ou meme quelqu'un d'autre plz ............  :sweat:  :sweat:  :sweat:  :sweat:

Reply

Marsh Posté le 17-05-2004 à 20:22:59    

struct _globale tmp;
     
      tmp=(struct _globale*)malloc(sizeof(struct _globale));
 
vas y, c'est quoi le type de tmp, c'est quoi le type de retour de malloc que tu castes inutilement ?

Reply

Marsh Posté le 17-05-2004 à 20:29:16    

Je suis etudiant et j'en chie en prog LOL ...
 
Je dois rendre projet et je suis desesperé ...
 
le tmp est un    struct _global
=>Je fais liste doublement chainee
 
Je te file CODE COMPLET meme si tu lis pas tout car ca fais chier je veux juste reussir a faire ca ... a compiler sans erreur ma liste ...
 

Code :
  1. /*ENVOYER EN .tgz */
  2. #include<stdio.h>
  3. #include"graphlib.h"
  4. #define POINT 1
  5. #define LIGNE 2
  6. #define TRIANGLE 3
  7. #define RECTANGLE 4
  8. #define CERCLE 5
  9. #define ELLIPSE 6
  10. #define VIDE 1
  11. #define PLEIN 0
  12. //Declaration des structures
  13. typedef struct _point
  14. {
  15.   int x1;
  16.   int y1;
  17.   int couleur;
  18. }point;
  19. typedef struct _ligne
  20. {
  21.   struct _point point1;
  22.   struct _point point2;
  23.   int couleur;
  24. }ligne;
  25. typedef struct _triangle
  26. {
  27.   struct _point point1;
  28.   struct _point point2;
  29.   struct _point point3;
  30.   int couleur;
  31. }triangle;
  32. typedef struct _cercle
  33. {
  34.   struct _point point1;
  35.   int rayon;
  36.   int couleur;
  37. }cercle;
  38. typedef struct _rectangle
  39. {
  40.   struct _point point1;
  41.   struct _point point2;
  42.   int couleur;
  43. }rectangle;
  44. typedef struct _ellipse
  45. {
  46.   struct _point point1;
  47.   int rayon1;
  48.   int rayon2;
  49.   int couleur;
  50. }ellipse;
  51. union _forme
  52. {
  53.   struct _point point;
  54.   struct _ligne ligne;
  55.   struct _triangle triangle;
  56.   struct _cercle cercle;
  57.   struct _rectangle rectangle;
  58.   struct _ellipse ellipse;
  59. };
  60. typedef struct _structForme
  61. {
  62.   int type_de_la_forme;
  63.   int remplir;
  64.   union _forme forme_figure;
  65. }structForme;
  66. typedef struct _globale
  67. {
  68.   struct _structForme maForme;
  69.   struct _globale *suivant;
  70.   struct _globale *precedent;
  71. }globale;
  72. //Prototypes
  73. void choisirCouleur();
  74. int retourCouleur(int currentColor);
  75. void afficheBordures(int bg,int fg,int cc);
  76. struct _structForme affectetion(struct _structForme element);
  77. struct _globale ajouterElement(struct _structForme formeActuelle,struct _globale elementAjoute);
  78. //Variables globales
  79. char titre[15]={"Paint by Noobs"};
  80. int x,y;
  81. int bg=114,fg=47,cc=0;                //Couleurs BackGround,ForGround,CurentColor
  82. globale *tete=NULL,*queue=NULL,*courant=NULL;
  83. globale *elt;
  84. structForme formeActuelle;
  85. //Fonction principale
  86. main()
  87. {
  88.   int x,y;                        //Position souris quand clic
  89.   int style=1;                        //Comme pour palette 0=plein(noir) 1=vide(blanc)
  90.   ouvrirFenetreTailleTitre(700,600,titre);
  91.   initPalette(NULL,256);
  92.   afficheBordures(bg,fg,cc);
  93.   do
  94.     {
  95.       if(x>130 && x<170 && y>520 && y<540)
  96. {
  97.   style=0;
  98. }
  99.       if(x>130 && x<170 && y>560 && y<580)
  100. {
  101.   style=1;
  102. }
  103.     positionSouris(&x,&y);
  104.     rafraichirFenetre();
  105.     modifierCouleur(cc);
  106.     if(x>0 && x<100 && y>0 && y<100)                       //Si clic dans point
  107.       {
  108. positionSouris(&x,&y);
  109. formeActuelle.type_de_la_forme=POINT;
  110. formeActuelle.remplir=style;
  111. if(x>100 && x<700 && y>0 && y<500)
  112.   {
  113.     ajouterElement(formeActuelle,*elt);
  114.     formeActuelle.forme_figure.point.x1=x;
  115.     formeActuelle.forme_figure.point.y1=y;
  116.     afficherPoint(formeActuelle.forme_figure.point.x1,formeActuelle.forme_figure.point.y1);
  117.   }
  118.       }
  119.     afficheBordures(bg,fg,cc);
  120.     }
  121.   while(x<600 || y<500);
  122. }
  123. //Fonctions
  124. struct _structForme affectetion(structForme element)
  125. {
  126.   structForme temp;
  127.   temp.type_de_la_forme=element.type_de_la_forme;
  128.   temp.remplir=element.remplir;
  129.   temp.forme_figure=element.forme_figure;
  130.   return temp;
  131. }
  132. struct _globale ajouterElement(struct _structForme formeActuelle,struct _globale elementAjoute)
  133. {
  134.   struct _globale tmp;
  135.   tmp=(struct _globale*)malloc(sizeof(struct _globale));
  136.   if(tete==NULL)
  137.     {
  138.       elementAjoute.suivant=NULL;
  139.       elementAjoute.precedent=NULL;
  140.       tete=elementAjoute;
  141.       queue=elementAjoute;
  142.       courant=elementAjoute;
  143.       tmp->maForme=affectation(formeActuelle);
  144.     }
  145.   else
  146.     {
  147.       elementAjoute.suivant=NULL;
  148.       elementAjoute.precedent=queue;
  149.       queue.suivant=elementAjoute; 
  150.       queue=elementAjoute;
  151.       tmp->maForme=affectation(formeActuelle);
  152.          
  153.     }
  154.   return tmp;
  155. }


 
voila merci pour l'aide !!!

Reply

Marsh Posté le 17-05-2004 à 20:42:16    

mais on en a rien à battre de ton code. tu nous montre une ligne, les types sont pas bon : à gauche une structure, à droite un pointeur. et ça tu ne comprends pas. le reste on s'en fiche

Reply

Marsh Posté le 17-05-2004 à 20:51:38    

JamesPatageule a écrit :

Je suis etudiant et j'en chie en prog LOL ...
 
Je dois rendre projet et je suis desesperé ...
 
le tmp est un    struct _global
=>Je fais liste doublement chainee
 
Je te file CODE COMPLET meme si tu lis pas tout car ca fais chier je veux juste reussir a faire ca ... a compiler sans erreur ma liste ...
 

Code :
  1. /*ENVOYER EN .tgz */
  2. #include<stdio.h>
  3. #include"graphlib.h"


 


javais lu envoye a taz  :heink:

Reply

Marsh Posté le 17-05-2004 à 20:57:22    

tiens sur soulèves un problème important là (mon sondage à la con avait été fermé). ne disons plus .tgz, mais .taz

Reply

Marsh Posté le 17-05-2004 à 21:03:18    

Justement c ca le probleme JE COMPRENDS PAS !!!
 
Si je comprenais tout je viendrais pas chercher de l'aide tu crois pas ???
 
Alors quand tu reponds met des lignes de commandes corrigees
en clair aide moi vraiment a trouver les erreur au lieu de tourner autour du pot
De plus c'est pas la peine de t'enerver c'est pas ma faute si toi t'est bon en C et pas moi et que je capte pas donc fais-en profité les autres.
merci quand meme

Reply

Marsh Posté le 17-05-2004 à 21:03:18   

Reply

Marsh Posté le 17-05-2004 à 21:05:30    

on s'énerve pas. t'es hors charte .|
     
tmp=(struct _globale*)malloc(sizeof(struct _globale));  
^^^                   ^^^^^^
structure             pointeur
 
problème. change tes types et voilà
       

Reply

Marsh Posté le 17-05-2004 à 21:08:20    

ok merci c'est vachement bcp plus clair comme ça merci
 
ms maintenant il tolere pas le :
 
elementAjoute.suivant=NULL;
            elementAjoute.precedent=NULL;
            tete=elementAjoute;
            queue=elementAjoute;
            courant=elementAjoute;
       
            tmp->maForme=affectation(formeActuelle);  
 
 
merci

Reply

Marsh Posté le 17-05-2004 à 21:11:05    

mais putain, c'est pas qu'il tolère pas, c'est toi qui écrit n'importe quoi. tu sais pas ce qu'est un pointeur alors revois tes bases.

Reply

Marsh Posté le 17-05-2004 à 21:12:15    

oki je vais me demerder merci qd meme a tous bonne soiree !!!
 
PS:Meme pas le droit de debuter ici ...

Reply

Marsh Posté le 17-05-2004 à 21:14:01    

non, c'est pas ça. tu veux faire une liste chaînée, mais ça te pose pas de problème de faire

Code :
  1. int i;
  2. int *p;
  3. i = p;
  4. p = i;


 
ça sert à rien de vouloir résoudre une équation si on sait pas faire une addition

Reply

Marsh Posté le 17-05-2004 à 21:17:14    

Taz a écrit :

non, c'est pas ça. tu veux faire une liste chaînée, mais ça te pose pas de problème de faire

Code :
  1. int i;
  2. int *p;
  3. i = p;
  4. p = i; boom

:D  
 
 


Message édité par red faction le 17-05-2004 à 21:17:27
Reply

Marsh Posté le 17-05-2004 à 21:18:10    

Je sais tres bien que je suis mauvais ... tres mauvais ...
Et je comprends que ca t'enerve que je comprenne rien ...
 
Mais tu sais le temps me manques ...
 
Excuse moi de m'etre enervé ...
 
JE VAIS ESSAYER DE M'EN SORTIR SEUL ... lol

Reply

Marsh Posté le 17-05-2004 à 22:01:42    

Alors me revoila avec mes blemes .. lol
 
Alors bcp de prb resoluts mais un reviens ... LE DERNIER !!!
 

Code :
  1. *courant=ajouterElement(formeActuelle);
  2.     courant->maForme.forme_figure.point.x1=x;
  3.     courant->maForme.forme_figure.point.y1=y;


 
Donne 3x SEGMENTATION FAULT !!!!
 
Me fouzillez pas SVP ... je veux juste aide !!! merci les gars !!!

Reply

Marsh Posté le 17-05-2004 à 23:54:21    

t'as pas alloué courant à tousles coups

Reply

Marsh Posté le 18-05-2004 à 00:07:08    

Non, visiblement le type de courant (pas de vannes faciles svp) et le type de la fonction ne correspondent pas.
 
PS: Tu arrives a compiler avec le code d'au-dessus?


Message édité par thermocline le 18-05-2004 à 00:10:08
Reply

Marsh Posté le 18-05-2004 à 00:38:28    

oui je compile mais ca merde apres ...
 
Que faire diantre ... lol

Reply

Marsh Posté le 18-05-2004 à 00:58:03    

... apprendre ... et arrêtez tes conneries parce que tu sais même pas faire un simple malloc

Reply

Marsh Posté le 18-05-2004 à 21:12:43    

ME REVOILA ...
 
Alors tout est reglé meme les malloc !!!! PROMIS !!!!
 
Mais DERNIER PRB ...
 
Lors de creation de liste chainee puis de lecture depuis la fin SEGMENTATION FAULT !!!
 
Voyez vous le probleme ???
 

Code :
  1. void *ajouterElement(struct _structForme formeActuelle)
  2. {
  3.   courant=(struct _globale*)malloc(sizeof(struct _globale));
  4.   if(tete==NULL)
  5.     {
  6.       courant->suivant=NULL;
  7.       courant->precedent=NULL;
  8.       tete=courant;
  9.       queue=courant;
  10.       courant->maForme=formeActuelle;
  11.     }
  12.   else
  13.     {
  14.       courant->suivant=NULL;
  15.       courant->precedent=queue;
  16.       queue->suivant=courant; 
  17.       queue=courant;
  18.       courant->maForme=formeActuelle;   
  19.     }
  20. }
  21. //Debut de test
  22. courant=queue;
  23. courant->precedent=temporaire;
  24. do
  25.   {
  26.    
  27.     printf("%i\n",courant->maForme.type_de_la_forme);
  28.     courant=temporaire;
  29.     courant->precedent=temporaire;
  30.   }
  31. while(temporaire->precedent!=NULL);
  32. //Fin de test


 
Voila ca me met SEGMENTATION FAULT
 
Si il manque infos dites le ...
 
Je debute alors indulgence plz ...

Reply

Marsh Posté le 18-05-2004 à 23:18:39    

c'est on algo, voilà tout
et ces quoi ces variables globales ?

Reply

Marsh Posté le 19-05-2004 à 00:55:19    

Ca vient de ton test.
 
Ce devrait etre:
 

Code :
  1. //Debut de test
  2.  
  3.    courant=queue;
  4.    temporaire=courant->precedent;
  5.  
  6.    do
  7.      {
  8.          
  9.          printf("%i\n",courant->maForme.type_de_la_forme);
  10.    
  11.          courant=temporaire;
  12.          temporaire=courant->precedent;
  13.      }
  14.    while(temporaire->precedent!=NULL);
  15.  
  16.    //Fin de test


 
A noter que ton do... while() est ici inapproprié (il faudrait un while). D'ailleurs le test aussi (tu vas systematiquement sauter l'element de tete). Enfin le temporaire est a priori inutile.

Reply

Marsh Posté le 22-05-2004 à 14:44:29    

ya un peu trop de globales a mon gout...
bahhhhhhhhhhhhhhhh
 
bon, comme le dit thermocline, tu vas sauter ton element de tete
vodrait mieux faire un while(courant!=null) au lieu de ce do...while
 
enfin, de tte facon, c pas tres clean tout ca


Message édité par captainneuneu le 22-05-2004 à 14:44:40
Reply

Marsh Posté le 29-05-2004 à 13:48:49    

si t'a une erreur de segmentation, tu peux la regler en debuggant a la main, histoire de savoir dans quel coin de ton prog ca merdoie.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed