View previous topic :: View next topic |
Author |
Message |
Tsukusa Tux's lil' helper
Joined: 01 Aug 2004 Posts: 133
|
Posted: Tue Oct 26, 2004 2:09 pm Post subject: [Programmation] Problème en C (résolu) |
|
|
Voilà je vous donne toute de suite ma code source:
Code: |
#include<stdio.h>
#include<stdlib.h>
typedef struct s_noeud{
float nombre;
struct s_noeud* p_suivant;
} Noeud;
void afficher(Noeud *n)
{
if(n!=NULL)
{
printf("%f %d\n",(*n).nombre,n);
afficher((*n).p_suivant);
}
}
void empiler(Noeud** tete,float info)
{
Noeud* temp;
temp=(Noeud*)malloc(sizeof(Noeud));
//printf("info empilée = %f\n",info);
temp->nombre=info;
//printf("info empilée = %f\n",(*temp).nombre);
temp->p_suivant=(*tete);
(*tete)=temp;
}
float depiler(Noeud** tete)
{
Noeud* temp;
float info;
//printf("FREE AVT\n");
temp=(*tete);
info=temp->nombre;
//printf("info = %f\n",info);
(*tete)=(*tete)->p_suivant;
free(temp);
//printf("FREE APRES\n");
return info;
}
void main()
{
Noeud* tete;
tete=NULL;
char c;
int nb_operande=0;
do
{
//printf("\n\n");afficher(tete);printf("\n\n");
c='\0';
scanf("%1s",&c);
if(c>='0' && c<='9')
{
//printf("Premier if\n");
nb_operande += 1;
empiler(&tete,(float)(c-'0'));
}
else
{
//printf("Premier else\n");
if((c=='+' || c=='-' || c=='*' || c=='/') && nb_operande>=2)
{
//printf("deuxieme if\n");
float a=0,b=0; //l'erreur est ici
float resultat=0; //il faut les déclarer en début de fonction en C contrairement au C++ où on a le droit de faire ca
//printf("depiler A\n");
a=depiler(&tete);//printf("a=%f\n",a);
//printf("depiler B\n");
b=depiler(&tete);//printf("b=%f\n",b);
//printf("fin depiler \n");
switch(c){
case '+':resultat=a+b;
break;
case '-':resultat=a-b;
break;
case '*':resultat=a*b;
break;
case '/':resultat=a/b;
break;
}
nb_operande -= 1;
empiler(&tete,resultat);
}
else if(c!='=')
{
//printf("deuxieme else\n");
printf("Saisie incorrecte\n");
}
}
//printf("\n\n");afficher(tete);printf("\n\n");
}while(c!='=');
printf("%f",depiler(&tete));
}
|
Maintenant j'en viens à mon problème. Il faut savoir que ce programme marche sous windows. Maintenant quand je l'exécute sous linux il ne fonctionne pas. J'ai une erreur de segmentation.
Celle-ci se situe au niveau d'un pointeur qui se "transforme". Ce que je veux dire c'est qu'un adresse au lieu d'être l'adresse voulue est cette adresse voulue + 12. Forcément après j'ai un problème puisque que je vais essayer d'accéder à une zone mémoire qui n'existe pas. Maintenant je ne comprend pas pourquoi j'ai ce problème puisque que mon code à l'air bon.
PS: les zones commentées dans le texte sont mes affichages de test pour situer l'erreur.
Last edited by Tsukusa on Tue Oct 26, 2004 5:15 pm; edited 1 time in total |
|
Back to top |
|
|
Tsukusa Tux's lil' helper
Joined: 01 Aug 2004 Posts: 133
|
Posted: Tue Oct 26, 2004 4:55 pm Post subject: |
|
|
Personne n'a d'idée sur le pourquoi mes pointeurs déraillent? C'est pas que j'ai envie de développer sur Visual studio mais ... En fait si je n'ai pas envie de développer sur Visual Studio.
Il y a des jours comme ca .... |
|
Back to top |
|
|
Trevoke Advocate
Joined: 04 Sep 2004 Posts: 4099 Location: NY, NY
|
Posted: Tue Oct 26, 2004 4:59 pm Post subject: |
|
|
J'ai un peu beaucoup oublie le C, mais .. Pourquoi tu as
oid empiler(Noeud** tete,float info)
avec deux * ? _________________ Votre moment detente
What is the nature of conflict? |
|
Back to top |
|
|
Tsukusa Tux's lil' helper
Joined: 01 Aug 2004 Posts: 133
|
Posted: Tue Oct 26, 2004 5:14 pm Post subject: |
|
|
Trevoke wrote: | J'ai un peu beaucoup oublie le C, mais .. Pourquoi tu as
oid empiler(Noeud** tete,float info)
avec deux * ? |
Mon programme est une calculette polonise et fonctionne grâce à une pile. En gros j'ai besoin de pouvoir modifier mon pointeur de tête de listes.
Sinon j'ai enfin trouvé mon erreur.
Je fais une déclaration de variables dans une boucle si, ce n'est pas bon. On remet la déclaration au début et cela fonctionne (en C++ cela doit marcher par contre ...).
Bon un piège a éviter. La bonne nouvelle c'est que: PAS DE VISUAL STUDIO .NET youpiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
bon là je ne sais pas si je dois mais je sors |
|
Back to top |
|
|
kernelsensei Bodhisattva
Joined: 22 Feb 2004 Posts: 5619 Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)
|
Posted: Tue Oct 26, 2004 5:15 pm Post subject: |
|
|
Trevoke wrote: | J'ai un peu beaucoup oublie le C, mais .. Pourquoi tu as
oid empiler(Noeud** tete,float info)
avec deux * ? |
c'est equivalent a un tableau de pointeurs il me semble ! _________________ $ ruby -e'puts " .:@BFegiklnorst".unpack("x4ax7aaX6ax5aX15ax4aax6aaX7ax2aX5aX8 \
axaX3ax8aX4ax6aX3aX6ax3ax3aX9ax4ax2aX9axaX6ax3aX2ax4ax3aX4aXaX12ax10aaX7a").join' |
|
Back to top |
|
|
fafounet l33t
Joined: 03 Apr 2004 Posts: 703 Location: Meuves, France
|
Posted: Tue Oct 26, 2004 5:18 pm Post subject: |
|
|
En effet les déclarations de variable sont à faire au tout début de chaque fonction sinon caca boudin. Bizzare que tu n'es pas eu de msg explicite _________________ Prout ? |
|
Back to top |
|
|
Tsukusa Tux's lil' helper
Joined: 01 Aug 2004 Posts: 133
|
Posted: Tue Oct 26, 2004 5:21 pm Post subject: |
|
|
kernel_sensei wrote: | c'est equivalent a un tableau de pointeurs il me semble ! |
Dans la déclaration seulement ...
Après avoir déclarer un tableau de pointeur on doit allouer la mémoire style
Code: |
int** p_tab;
int i,nb_ligne,nb_colonne;
p_tab=(int**)malloc(nb_ligne*sizeof(int*));
for(i=0;i<nb_ligne;i++){
p_tab[i]=(int*)malloc(nb_colonne*sizeof(int));
}
|
|
|
Back to top |
|
|
Trevoke Advocate
Joined: 04 Sep 2004 Posts: 4099 Location: NY, NY
|
Posted: Tue Oct 26, 2004 6:16 pm Post subject: |
|
|
Comment c'est prise de tetes le langage de programmeurs en francais .... _________________ Votre moment detente
What is the nature of conflict? |
|
Back to top |
|
|
Sleeper l33t
Joined: 12 Nov 2002 Posts: 667
|
Posted: Tue Oct 26, 2004 6:43 pm Post subject: |
|
|
Tsukusa wrote: |
Code: |
int** p_tab;
int i,nb_ligne,nb_colonne;
p_tab=(int**)malloc(nb_ligne*sizeof(int*));
for(i=0;i<nb_ligne;i++){
p_tab[i]=(int*)malloc(nb_colonne*sizeof(int));
}
|
|
Tu peux aussi eviter d'enquiller les appels a malloc et n'allouer qu'une fois un gros bloc, et ensuite repointer dedans .. Ca permet de n'avoir aussi a faire qu'un seul free ... |
|
Back to top |
|
|
dju` Retired Dev
Joined: 11 Feb 2003 Posts: 370
|
Posted: Wed Oct 27, 2004 8:38 am Post subject: |
|
|
Sleeper wrote: | Tu peux aussi eviter d'enquiller les appels a malloc et n'allouer qu'une fois un gros bloc, et ensuite repointer dedans .. Ca permet de n'avoir aussi a faire qu'un seul free ... |
oui, c'est quand même plus simple |
|
Back to top |
|
|
Tsukusa Tux's lil' helper
Joined: 01 Aug 2004 Posts: 133
|
Posted: Wed Oct 27, 2004 11:16 am Post subject: |
|
|
J'aime bien la difficulté moi ...
entre nous le C c'est bien pour faire de la programmation système mais sinon il y a mieux tout de même .... |
|
Back to top |
|
|
Sleeper l33t
Joined: 12 Nov 2002 Posts: 667
|
Posted: Wed Oct 27, 2004 11:45 am Post subject: |
|
|
Tsukusa wrote: | J'aime bien la difficulté moi ... |
C'est pas qu'une question de difficulte .. si ton code est execute en boucle ca va etre moins "efficient" q'un seul malloc, et un set des pointers associes ...
Quote: | entre nous le C c'est bien pour faire de la programmation système mais sinon il y a mieux tout de même .... |
Tout a fait d'accord ... Ruby rulezzzz |
|
Back to top |
|
|
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
Posted: Wed Oct 27, 2004 11:52 am Post subject: |
|
|
Sleeper wrote: | Tout a fait d'accord ... Ruby rulezzzz |
+1
Merci infiniment Sleeper d'avoir parlé de ruby dans le thread su perl ou python ... çela m'a convaincu d'apprendre et maintenant je suis devenu un méga fan moi aussi ! Ce langage est excellentissime. Je suis en train d'écrire une sorte de gentoolkit avec pour me faire la main. Pour l'instant j'ai fait comme un emerge search (mais nettement plus rapide). Des que le tout est prêt je le posterait. _________________ http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse |
|
Back to top |
|
|
Sleeper l33t
Joined: 12 Nov 2002 Posts: 667
|
Posted: Wed Oct 27, 2004 12:38 pm Post subject: |
|
|
scout wrote: |
+1
Merci infiniment Sleeper d'avoir parlé de ruby dans le thread su perl ou python ... çela m'a convaincu d'apprendre et maintenant je suis devenu un méga fan moi aussi ! Ce langage est excellentissime. Je suis en train d'écrire une sorte de gentoolkit avec pour me faire la main. Pour l'instant j'ai fait comme un emerge search (mais nettement plus rapide). Des que le tout est prêt je le posterait. |
De rien .. je serais assez interesse par ton code .. J'aime bien regarder le code des autres, ca permet d'avoir de nouvelles idees
Pour le moment j'ai pas commis (en fait diffuse) grand chose en Ruby a part ce petit truc ... Mais par contre au boulot, j'y vais a donf .. je noyaute jusqu'a ce que Ruby soit officiellement adopte (pour le moment c'est plutot : "Y'a que toi qui connait" meme si ce n'est pas vrai.. mais apres avoir fait 2 versions du meme programme l'une en Perl et l'autre en Ruby, certains sont restes sur le cul ..) |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Wed Oct 27, 2004 1:15 pm Post subject: |
|
|
Ce qui est bien avec Perl c'est que c'est très complet en modules et il y a un très bon echange de code entre les programmeurs Perl. C'est en effet assez facile de trouver un exemple, un module qu'on va pouvoir utiliser, etc...
la communauté perl est vraiment motivante.
qu'en est il de ruby?
autre chopse encore, je suis d'accord sur le point que perl peut très vite devenir "brouillon" si on se fait pas violence pour adopter une disciplibne très strict. Là dessus, à ce que j'ai pu voir, ruby est plus propre. Et entre ruby et python à ce sujet lequel est plus "propre"? |
|
Back to top |
|
|
Sleeper l33t
Joined: 12 Nov 2002 Posts: 667
|
Posted: Wed Oct 27, 2004 3:07 pm Post subject: |
|
|
kwenspc wrote: | Ce qui est bien avec Perl c'est que c'est très complet en modules et il y a un très bon echange de code entre les programmeurs Perl. C'est en effet assez facile de trouver un exemple, un module qu'on va pouvoir utiliser, etc...
la communauté perl est vraiment motivante.
qu'en est il de ruby?
autre chopse encore, je suis d'accord sur le point que perl peut très vite devenir "brouillon" si on se fait pas violence pour adopter une disciplibne très strict. Là dessus, à ce que j'ai pu voir, ruby est plus propre. Et entre ruby et python à ce sujet lequel est plus "propre"? |
Je suis "oblige" (pour le moment de faire du Perl... Bien que je trouve ce langage tres sympa pour les petits scripts, je trouve qu'il passe difficilement a l'echelle pour les projets un peu plus fournis .. Je dis ca mais je dois en faire depuis 1997, donc ca commence a faire un paquet de projet "un peu plus fournis" ...
Neanmoins meme en se faisant violence c'est pas excessivement propre .. et je ne parles meme pas d'un prog OO, ou la c'est le cauchemard ...
Certes de nobreux packages existent sur CPAN .. Pour Ruby, beaucoup de package existent dans la distrib par defaut, comme:
- cgi (devine a quoi il sert
- complex
- base64
- drb (distributed ruby: une machine exporte un/des objets, d'autres machines les utilisent)
- erb (template, un peu equivalent a JSP pour ce que j'en connais)
- expect (pour faire comme Expect ou Perl::Expect)
- tous les "petits" trucs reseaux (Net::FTP/ Net::HTTP) ...
- rss (gestion/creation de flux RSS)
- shell (session shell like)
- threading
- tk
- webrick (un serveur http)
- xmlrpc
- wsdl
- yaml (un langage de description de donnees pour langages "agiles", beaucoup plus leger que XML)
- ...
Ensuite tu peux recuperer des packages sur l'equivalent du CPAN .. Tu les installes soit a la main, soit grace a Gem, soit grace a rpa. Y'a beaucoup de truc sympas (genre Net:SSH) ...
Maintenant, quant a le comparer a Python, ca va partir en flame war ... Bien que je pense que Python a l'air tres bien, je n'ai jamais reussi a m'y faire .. Je n'aime pas cette idee de block "introduit" par l'indentation, de meme que je ne comprends pas pourquoi chaque methode d'un objet doit commencer par self .. Je sais que c'est explique dans la FAQ, mais je trouve les explications un peu .. tirees par les cheveux ...
Pour moi le choix est fait: j'essaie de faire le max. de chose avec Ruby. Mon systeme de redirection de mail s'appuie maintenant sur gurgitate-mail, qui me permet d'ecrire mes regles de redicrection en Ruby, mon systeme anti-spam, utilise bogofilter + un script en Ruby, qui se charge de donner tous les mails marques comme spam effectif a bogofilter (pour son apprentissage), de meme que tous les faux-positifs (idem), mon blog est genere par un hobix, mon fichiers TODO sont geres par mon script Ruby .. etc ...
Finalement je n'utilise Python que pour Portage quoique si je passais a RubyX ...
Encore une fois c'est pas un troll, chacun fait ce qui lui plait, et Perl et Python sont indeniablement de bons langages .. apres les gouts et les couleurs ...
Last edited by Sleeper on Wed Oct 27, 2004 3:34 pm; edited 1 time in total |
|
Back to top |
|
|
sireyessire Advocate
Joined: 20 Mar 2003 Posts: 2991 Location: back in Paris, France
|
Posted: Wed Oct 27, 2004 3:26 pm Post subject: |
|
|
Sleeper wrote: |
Finalement je n'utilise Python que pour Portage quoique si je passais a RubyX ...
Encore une fois c'est pas un troll, chacun fait ce qui lui plait, et Perl et Python sont indeniablement de bons langages .. apres les gouts et les couleurs ... |
il manque un t dans ton lien:
RubyX doit être mieux _________________ I never think of the future. It comes soon enough.
Albert Einstein
Try simpler first
Shockley |
|
Back to top |
|
|
Sleeper l33t
Joined: 12 Nov 2002 Posts: 667
|
Posted: Wed Oct 27, 2004 3:35 pm Post subject: |
|
|
sireyessire wrote: | il manque un t dans ton lien:
RubyX doit être mieux |
Oups .. merci .. corrige. |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Wed Oct 27, 2004 5:51 pm Post subject: |
|
|
Eh bien!
je suis conquis!
je vais essayer ce langage dès que j'en aurais fini avec mon projet en Perl. (qui d'ailleurs n'est pas codé du tout en orienté objet) |
|
Back to top |
|
|
Sleeper l33t
Joined: 12 Nov 2002 Posts: 667
|
Posted: Thu Oct 28, 2004 6:21 am Post subject: |
|
|
kwenspc wrote: | Eh bien!
je suis conquis!
je vais essayer ce langage dès que j'en aurais fini avec mon projet en Perl. (qui d'ailleurs n'est pas codé du tout en orienté objet) |
Je te donne qq liens:
- Why's (poignant) guide to Ruby : decale et genial ..
- Programming Ruby : la version online du livre (existe aussi en tarball).. A noter: la 2nde edition est en vente depuis 1 mois (pas de version online) .. et semble extraordinaire (j'attends ma commande [url=http://www.pragmaticprogrammer.com/titles/ruby/index.html Programming Ruby (2nd. Ed.)[/url]
- ruby-doc pour la doc sur le langage et les librairies standards (que tu peux avoir en ligne de commande grace a ri)
- ruby wiki Ben le wiki
- Ruby FAQ .. ecrite en Ruby
Voilou:) |
|
Back to top |
|
|
|