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

  FORUM HardWare.fr
  Programmation
  C

  [C] Probleme d'allocation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Probleme d'allocation

n°729488
JamesPatag​eule
Posté le 17-05-2004 à 20:00:27  profilanswer
 

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

mood
Publicité
Posté le 17-05-2004 à 20:00:27  profilanswer
 

n°729491
Taz
bisounours-codeur
Posté le 17-05-2004 à 20:04:16  profilanswer
 

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

n°729494
JamesPatag​eule
Posté le 17-05-2004 à 20:05:38  profilanswer
 

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

n°729504
JamesPatag​eule
Posté le 17-05-2004 à 20:17:45  profilanswer
 

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

n°729507
Taz
bisounours-codeur
Posté le 17-05-2004 à 20:22:59  profilanswer
 

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 ?

n°729510
JamesPatag​eule
Posté le 17-05-2004 à 20:29:16  profilanswer
 

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 !!!

n°729516
Taz
bisounours-codeur
Posté le 17-05-2004 à 20:42:16  profilanswer
 

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

n°729519
red factio​n
Posté le 17-05-2004 à 20:51:38  profilanswer
 

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:

n°729522
Taz
bisounours-codeur
Posté le 17-05-2004 à 20:57:22  profilanswer
 

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

n°729523
JamesPatag​eule
Posté le 17-05-2004 à 21:03:18  profilanswer
 

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

mood
Publicité
Posté le 17-05-2004 à 21:03:18  profilanswer
 

n°729525
Taz
bisounours-codeur
Posté le 17-05-2004 à 21:05:30  profilanswer
 

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

n°729528
JamesPatag​eule
Posté le 17-05-2004 à 21:08:20  profilanswer
 

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

n°729532
Taz
bisounours-codeur
Posté le 17-05-2004 à 21:11:05  profilanswer
 

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.

n°729534
JamesPatag​eule
Posté le 17-05-2004 à 21:12:15  profilanswer
 

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

n°729539
Taz
bisounours-codeur
Posté le 17-05-2004 à 21:14:01  profilanswer
 

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

n°729542
red factio​n
Posté le 17-05-2004 à 21:17:14  profilanswer
 

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
n°729543
JamesPatag​eule
Posté le 17-05-2004 à 21:18:10  profilanswer
 

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

n°729600
JamesPatag​eule
Posté le 17-05-2004 à 22:01:42  profilanswer
 

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 !!!

n°729685
Taz
bisounours-codeur
Posté le 17-05-2004 à 23:54:21  profilanswer
 

t'as pas alloué courant à tousles coups

n°729702
thermoclin​e
Geek intelligent
Posté le 18-05-2004 à 00:07:08  profilanswer
 

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
n°729740
JamesPatag​eule
Posté le 18-05-2004 à 00:38:28  profilanswer
 

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

n°729747
Taz
bisounours-codeur
Posté le 18-05-2004 à 00:58:03  profilanswer
 

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

n°730761
JamesPatag​eule
Posté le 18-05-2004 à 21:12:43  profilanswer
 

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

n°730882
Taz
bisounours-codeur
Posté le 18-05-2004 à 23:18:39  profilanswer
 

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

n°730952
thermoclin​e
Geek intelligent
Posté le 19-05-2004 à 00:55:19  profilanswer
 

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.

n°734705
captainneu​neu
Posté le 22-05-2004 à 14:44:29  profilanswer
 

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
n°744601
Grosmoc
Posté le 29-05-2004 à 13:48:49  profilanswer
 

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.

mood
Publicité
Posté le   profilanswer
 


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

  [C] Probleme d'allocation

 

Sujets relatifs
[VB6] probleme pour lire un fichier avec Open[JS] Étrange problème de soustraction
ENORME PROBLEMEProbleme compatibilité windows/linux
Probleme jtabbedpane et canvas3d[asp-vbs-acess]Problème de conpatibilité...
[Swing][JprogressBar]Problémé d'affichage de Mon JprogressBarProblème avec les boutons radio en asp
[HTML / CSS] Problème d'alignement de 2 div dans une celluleprobleme d'affichage d'une boite de dialogue avec JOptionPane
Plus de sujets relatifs à : [C] Probleme d'allocation


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