Erreur de segmentation C++
Résolu/Fermé
Piven
Messages postés
81
Date d'inscription
lundi 7 septembre 2009
Statut
Membre
Dernière intervention
27 février 2012
-
16 déc. 2009 à 00:16
Piven Messages postés 81 Date d'inscription lundi 7 septembre 2009 Statut Membre Dernière intervention 27 février 2012 - 17 déc. 2009 à 21:12
Piven Messages postés 81 Date d'inscription lundi 7 septembre 2009 Statut Membre Dernière intervention 27 février 2012 - 17 déc. 2009 à 21:12
A voir également:
- Erreur de segmentation (core dumped)
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur de lecture reconnecté en 3s - Forum TV & Vidéo
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
5 réponses
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
16 déc. 2009 à 00:35
16 déc. 2009 à 00:35
for(int i=1;i<23;i++)
if (strcmp(str,tab_test[i])==0)
return i;
return 0;
}
attention les tableaux commencent à l'indice [0] et le tien finis à [21] dans ton cas puisqu'il y a 22 éléments.
Donc quand tu essayes d'accéder au [22] comme ton code le permet, il y a erreur de ségmentation normalement.
if (strcmp(str,tab_test[i])==0)
return i;
return 0;
}
attention les tableaux commencent à l'indice [0] et le tien finis à [21] dans ton cas puisqu'il y a 22 éléments.
Donc quand tu essayes d'accéder au [22] comme ton code le permet, il y a erreur de ségmentation normalement.
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
16 déc. 2009 à 19:30
16 déc. 2009 à 19:30
Depuis que j'ai lu ce post, ça me titille; le coup du débordement d'indice qui donne un 'segment fault', je n'en suis pas sûr dans la mesure où l'on écrit rien (sauf si on déborde de la page allouée, selon le système d'exploitation). Toutefois il est certain que c'est une grosse erreur.
Ce qui me gêne le plus est:
char* type;
cin>>type;
Là on est quasi certain d'obtenir un 'segment fault'.
L'exercice, quelque peu simplifié pourrait ainsi s'écrire:
Ce qui me gêne le plus est:
char* type;
cin>>type;
Là on est quasi certain d'obtenir un 'segment fault'.
L'exercice, quelque peu simplifié pourrait ainsi s'écrire:
#include <iostream> #include <string.h> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { const char* tab_test[5] = {"carre", "rectangle", "triangle", "arc de cercle", "segment" }; char buffer[100]; cout<<"Quel type d'élément voulez vous ajouter : " ; cin.get(buffer, 100); for (unsigned int i=0; i<strlen(buffer); i++) buffer[i] = tolower(buffer[i]); for (int i=0; i<5; i++) if (!strcmp(buffer, tab_test[i])) { cout << "Type: " << tab_test[i] << " Ok." << endl; return (EXIT_FAILURE); } cout << "Type incorrect." << endl; return (EXIT_SUCCESS);Bonne continuation.
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
16 déc. 2009 à 22:25
16 déc. 2009 à 22:25
ah oui, c'est évident, c'est une erreur "grave" qui cause sans doute le message d'erreur merci de l'avoir remarqué! :)
Piven
Messages postés
81
Date d'inscription
lundi 7 septembre 2009
Statut
Membre
Dernière intervention
27 février 2012
3
16 déc. 2009 à 23:41
16 déc. 2009 à 23:41
"buffer[i] = tolower(buffer[i]);" Ne gère pas les "é" mais ça réduit tout de même les possibilités. Merci de ton aide, mais après avoir résolut se problème de manière différente(C'était a priorie du cin>>char* donc j'ai limité la taille a 50), Je suis tombé sur une autre ERREUR DE SEGMENTATION... Dût un problème de Polymorphisme... Je travail encore dessus. Mais ça fait chauffer les neurones!
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
17 déc. 2009 à 00:07
17 déc. 2009 à 00:07
Sors dehors, ils vont refroidir !
L'utilisation de la fonction 'cin' pour saisir les chaînes de caractères est toujours dangereux car elle ne gère pas la taille saisie; malgré tout il est possible de saisir une chaîne de caractères car en C++ il existe les strings, et là il n'y a pas de problème.
Ne gère pas les "é"
Je sais et c'est la raison pour laquelle, j'ai précisé 'quelque peu simplifié'.
Bonne continuation.
L'utilisation de la fonction 'cin' pour saisir les chaînes de caractères est toujours dangereux car elle ne gère pas la taille saisie; malgré tout il est possible de saisir une chaîne de caractères car en C++ il existe les strings, et là il n'y a pas de problème.
Ne gère pas les "é"
Je sais et c'est la raison pour laquelle, j'ai précisé 'quelque peu simplifié'.
Bonne continuation.
Piven
Messages postés
81
Date d'inscription
lundi 7 septembre 2009
Statut
Membre
Dernière intervention
27 février 2012
3
17 déc. 2009 à 15:56
17 déc. 2009 à 15:56
Le soucis avec les string c'est que je ne sais pas si il existe la surcharge du "==". Alors que je sais me servir de strcmp(char*,char*).
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
17 déc. 2009 à 16:41
17 déc. 2009 à 16:41
pas de souci avec std::string et == ; s'il y avait un problème le compilo te le dirai.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Piven
Messages postés
81
Date d'inscription
lundi 7 septembre 2009
Statut
Membre
Dernière intervention
27 février 2012
3
17 déc. 2009 à 21:12
17 déc. 2009 à 21:12
C'est vrai que ça aurais etait plus simple. Mais bon maintenant c'est fait ;)