Segmentation Fault & Badly placed ()'s
Fermé
aymaneelboujnani
Messages postés
3
Date d'inscription
mardi 8 janvier 2019
Statut
Membre
Dernière intervention
11 janvier 2019
-
Modifié le 11 janv. 2019 à 09:57
yg_be Messages postés 23297 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 octobre 2024 - 12 janv. 2019 à 12:25
yg_be Messages postés 23297 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 octobre 2024 - 12 janv. 2019 à 12:25
A voir également:
- Segmentation Fault & Badly placed ()'s
- Erreur de segmentation - Forum C
- Scanf segmentation fault ✓ - Forum Programmation
- Zsh: segmentation fault ✓ - Forum Programmation
- Erreur de segmentation (core dumped) ✓ - Forum C
- Erreur de segmentation C++ ✓ - Forum C++
1 réponse
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 11 janv. 2019 à 10:43
Modifié le 11 janv. 2019 à 10:43
Salut aymaneelboujnani,
Quand j'execute avec ./CalRes.c il me renvoi badly placed ()'s
Tu ne peux pas exécuter directement le programme source. Tu dois le compiler et exécuter le résultat de la compilation. Là le shell Linux (bash certainement) essaye d'exécuter le contenu du fichier source sous forme d'instructions shell, et, évidemment, cela ne fonctionne pas.
Quand j'execute avec gcc -o Cal CalRes.c puis Cal, il me renvoi Segmentation fault
Si tu es sous Linux, tu exécutes le programme "Cal" situé dans le répertoire courant en faisant
Par ailleurs, pour compiler un programme utilisant les fonctions de
Sinon, tu as certainement une erreur mémoire en exécutant l'exécutable produit par la compilation, car tu te sers la valeur de N pour déclarer la taille de tes tableaux, alors que N n'est pas encore initialisée et contient n'importe quoi (N n'est renseigné par l'utilisateur qu'après). Il y a des chances que cette valeur explose la pile mémoire en déclarant tes 4 tableaux avec une dimension de cette valeur arbitraire.
Tu pourrais donc faire comme cela :
J'ai remplacé tes
Il y aura sans doutes d'autres choses à régler dans ton code pour qu'il ait du sens ou produise le résultat attendu, mais, au moins tu ne resteras pas sur une segfault :-)
Dal
Quand j'execute avec ./CalRes.c il me renvoi badly placed ()'s
Tu ne peux pas exécuter directement le programme source. Tu dois le compiler et exécuter le résultat de la compilation. Là le shell Linux (bash certainement) essaye d'exécuter le contenu du fichier source sous forme d'instructions shell, et, évidemment, cela ne fonctionne pas.
Quand j'execute avec gcc -o Cal CalRes.c puis Cal, il me renvoi Segmentation fault
Si tu es sous Linux, tu exécutes le programme "Cal" situé dans le répertoire courant en faisant
./Cal
Par ailleurs, pour compiler un programme utilisant les fonctions de
math.h, avec gcc, tu devrais passer l'option
-lmqui permet de lier l'exécutable à la bibliothèque
libm.a...
$ gcc -Wall -o Cal CalRes.c -lm
Sinon, tu as certainement une erreur mémoire en exécutant l'exécutable produit par la compilation, car tu te sers la valeur de N pour déclarer la taille de tes tableaux, alors que N n'est pas encore initialisée et contient n'importe quoi (N n'est renseigné par l'utilisateur qu'après). Il y a des chances que cette valeur explose la pile mémoire en déclarant tes 4 tableaux avec une dimension de cette valeur arbitraire.
Tu pourrais donc faire comme cela :
unsigned int N; double K = 1.38/pow(10,23); int i, j, k, l; printf("Please indicate the number of points : "); scanf("%i", &N); double I[N], V[N], R[N], Sth[N];
J'ai remplacé tes
floatpar des
doublepour augmenter la précision disponible, mais même avec un
double, le dénominateur de K est tellement grand, que K est évalué à 0 sur ma machine... Pareil avec
long doublechez moi.
Il y aura sans doutes d'autres choses à régler dans ton code pour qu'il ait du sens ou produise le résultat attendu, mais, au moins tu ne resteras pas sur une segfault :-)
Dal
11 janv. 2019 à 10:45
"K est évalué à 0"
Je n'ai pas fait l'essai et ça ne serait pas la première fois que je dis une bêtise en C, mais ça m'étonne. 1.38/pow(10,23), ça n'est pas tout simplement 1.38e-23 ?
Modifié le 11 janv. 2019 à 13:39
donne :
Cela fonctionne bien chez moi, même avec un float :-)
11 janv. 2019 à 13:58
Et mes excuses à aymaneelboujnani pour ces digressions qui s'écartent de son sujet. il me semble quand même qu'écrire 1.38e-23 est plus clair que 1.38 / pow(10,23).
11 janv. 2019 à 14:19
Y a-t-il une solution ou je dois coder en utilisant un autre langage ?
Merci d'avance !
Modifié le 11 janv. 2019 à 15:30
en fait K ne vaut pas 0, même si en faisant un tu vois , c'est juste que, dans ce format d'affichage, il n'y a pas assez de zéros pour afficher la valeur
pour afficher un résultat mathématiquement correct, le format d'affichage normal ne suffit pas et il faut afficher la valeur en notation scientifique : affiche bien ...
et comme suggéré par le père., il est sans doutes préférable d'écrire directement que ...