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

Python Discussion :

Erreur de segmentation sur fermeture fichier [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 70
    Par défaut Erreur de segmentation sur fermeture fichier
    Bonjour,
    J'ai un programme qui gère l’émission et la réception de donnée sur Raspbian (Dernière version stage)

    Dans ma boucle principale, périodiquement, j'ouvre un fichier temporaire de stockage de données pour les émettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    while 1: #Voir que faire pour l'arrêt'    #Test de réception'
        print("li")
        Ligne=[]
        print("fl")
        radio.flush_tx()
        radio.flush_rx()
        print("list")
        radio.startListening()
        print("ev")
        GPIO.add_event_detect(irq_gpio_pin, GPIO.FALLING, callback=GPIO_NRF_Int, bouncetime=75)
        print("attente")
        time.sleep(30)
        radio.stopListening()
        print("rm")
        GPIO.remove_event_detect(irq_gpio_pin)
        #Emission si nécessaire
        print("op")
     
     
        f=open(ChFiEm,"rb")
        print("rd")
        cs=csv.reader(f,delimiter=',',quotechar='"',quoting=csv.QUOTE_NONNUMERIC,lineterminator="\r\n")
        for line in cs:
            print("ap")
            Ligne.append(map(int,line))
        print("cl1")
        while(not f.closed):
            f.close()
            time.sleep(1)
        print("rm")
        f=open(ChFiEm,"wb")
        #f.truncate()
        print("cl2")
        while(not f.closed):
            f.close()
            time.sleep(1)
        for line in Ligne:
            print("ligne")
            while(not Datagl==line):
                Datagl=[line[0]]
                #Test si Heure ou tableau d'activation.'
                if len(line)==3:
                    #Emission heure
                    Emission(line[0],line[-2:])
                elif len(line)==7:
                    #Tableau d'activation'
                    Emission(line[0], line[-6:])
                #Test de bonne émission'
                radio.flush_tx()
                radio.flush_rx()
                radio.startListening()
                GPIO.add_event_detect(irq_gpio_pin, GPIO.FALLING, callback=GPIO_NRF_Int, bouncetime=75)
                time.sleep(2)
                radio.stopListening()
                GPIO.remove_event_detect(irq_gpio_pin)
                print('Data:',Datagl,'line',line)
            Datagl=[-1]
    Au bout d'un certain nombre d'itérations, quand il n'y a aucune donnée à émettre, à la ligne 27, mon programme s’interrompt. Dans GDB, j'obtients l'erreur suivante :
    Thread 2 "python" received signal SIGSEGV, Segmentation fault.[Switching to Thread 0x76a4e470 (LWP 2253)]
    0x76a7dbc0 in ?? ()
    from /usr/lib/python2.7/dist-packages/RPi/_GPIO.arm-linux-gnueabihf.so

    Lorsque je fait un backtrace, j'obtiens la réponse suivante :
    #0 0x76a7dbc0 in ?? ()
    from /usr/lib/python2.7/dist-packages/RPi/_GPIO.arm-linux-gnueabihf.so
    #1 0x00000000 in ?? ()
    Backtrace stopped: previous frame identical to this frame (corrupt stack?)

    Avez-vous une idée du problème. Je soupçonne un pointeur null sur le fichier ou un dépassement de mémoire. Cependant, je ne sais pas comment agir pour résoudre ce problème.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    À ce que j'ai pu lire par ci par là, c'est la fonction

    remove_event_detect

    qui poserait problème. Avec un bloc try-except, il faudrait déjà tester si cette erreur se reproduirait afin de confirmer mes dires...
    Si oui, alors regarder la documentation pour gérer cela proprement.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 70
    Par défaut
    Merci beaucoup,
    L'erreur provenait bien de cette fonction.

    J'ai entrepris de créer une variable qui mémorise l'exécution de la fonction d'interruption.
    Si elle est en cours, on sort de suite, sinon elle s'interrompt.

    Bonne journée.

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

Discussions similaires

  1. Erreur de segmentation sur une concaténation
    Par cypher.sephiroth dans le forum Débuter
    Réponses: 14
    Dernier message: 18/08/2009, 17h42
  2. Erreur de segmentation sur ifstream.close()
    Par tHE_fLAmMinG_mOE dans le forum SL & STL
    Réponses: 4
    Dernier message: 27/01/2009, 14h54
  3. Erreur de segmentation sur une File
    Par hugo1992 dans le forum C
    Réponses: 2
    Dernier message: 22/10/2007, 08h49
  4. Erreur de filesize sur un fichier existant
    Par taka10 dans le forum Langage
    Réponses: 1
    Dernier message: 20/03/2007, 10h44
  5. Erreur de segmentation sur une chaine en récursif...
    Par laurent_ifips dans le forum C
    Réponses: 12
    Dernier message: 13/12/2005, 16h04

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