IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[g++][unix] "Erreur de Segmentation" et long int ne suffit pas pour un int =1600 ?


Sujet :

Linux

  1. #1
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 18
    Par défaut [g++][unix] "Erreur de Segmentation" et long int ne suffit pas pour un int =1600 ?
    Bonjour;
    1/ Je suis désolé de reposer cette question sous une autre forme:
    j'essaya les types long int et long long pour une variable qui devrait recevoir une valeur égale à 1000 et plus mais lors de l'éxecution l'affichage de sa valeur me donne une valeur inferieure à 700, mais si je l'affiche juste après sa lecture à partir d'un fichier texte elle donne le bon résultat mais après quelques commandes elle change d'elle même ?
    que se passe t il ?

    2/ Après plusieurs executions de mon programme de calcul il me fait le méssage suivant "Erreur de Segmentation" et s'arrete ?
    quel est le remède ?
    Merci

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    ton problème à rien à voir avec Unix ni g++...

    dans les deux cas, je penche pour un pointeur qui se balade un peu n'importe où ou qui est libéré un peu trop tôt, serait-il possible de voir les traitement que tu fais ?


    pour info, un int de base est stocké sur 32bits, ce qui permet d'avoir des valeurs de l'ordre de 10^20 (de tête)... je ne pense pas que les valeurs du style 700 suffisent pour saturer un entier XD
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Même chose, ça n'a rien à voir avec ton problème, tu as un débordement de capacité d'un tableau qui est peut-être déclaré proche de ta variable et c'est ce qui entraîne le débordement de capacité après. C'est êut-être ça ton problème.
    Solution : débuggeur.

  4. #4
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 18
    Par défaut
    Bonjour, et Merci pour votre atention;
    Alors voici le source que vous demandâtes.
    Indications:
    Le programme se décompose en 3 fichiers: le fichier principale fkd.cpp qui fait appelle aux deux fichiers header lire_maillage.h et calc_kg.h. le fichier maillage.msh est en entrie et source des données à traiter.
    Dans lire_maillage.h " nbnds " est la variable qui me torture le cerveau et l'esprit, le programme la lit à partir de maillage.msh à la ligne 23 et l'affiche à la ligne 72.
    je vous donne aussi mon executable modifié et allegé.
    Ma configuration est:
    SuSE Linux 9.0
    192 MO RAM
    cinq cent MHz pour le P III (désolé j'ai honte)

    Amusez vous bien, je n'est plus de jus dans ma tête.
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    On a pas demandé le source, on a dit qu'il fallait utiliser un débuggeur pour voir ce qui se passait pour définir ce qui ne fonctionne pas correctement. MAis si on a un peu de temps, on regardera, mais un code minimal serait mieux, à savoir un code où tout ce qui est possible d'être ôté serait ôté tout en reproduisant l'erreur.
    Une version compilée n'est pas utile, surtout si les autres n'ont pas le même OS

  6. #6
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 18
    Par défaut
    Merci.
    Mais je n'ai pas de pointeur qui traine quelque part.
    Je jette l'éponge, le torchon, le balai, les produits détergents et tout le reste.

  7. #7
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par zaim
    Mais je n'ai pas de pointeur qui traine quelque part.
    c'est pourtant le seul moyen d'avoir une segfault (à moins de faire mumuse avec les références, et encore, ça demande qd mm de jouer avec les pointeurs à un moment
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  8. #8
    Membre averti
    Inscrit en
    Juillet 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 18
    Par défaut
    Salut à vous terriens;
    alors j'ai rexecuté mon executable avec des valeurs inferieur à 1000 de la variable intiere, et ça marche. Par contre pour une valeur de 1849 elle me donne "ERREUR SEGMENTATION".
    MAIS qu'est ce qui se passe ??

  9. #9
    Membre éclairé Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Par défaut
    Comme la dit swoog, une erreur de segmentation est nécessairement une erreur de pointeur.

    Dans quel contexte utilise tu cette variable entière?

  10. #10
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    J'ai jeté un coup d'oeil au code, je ne corrigerai pas.
    Le fichier .cpp ne contient qu'une fonction main de plus de 30 lignes, il y a des variables globales, ...
    Ce que je propose plutôt :
    - des fonctions de 10 lignes maximum
    - des variables LOCALES - surtout que là, il n'y a qu'une seule fonction principale, donc les faire rentrer à l'intérieur, c'est facile -
    - utilisation des fonctions de la STL pour stocker les tableaux
    - ...

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo