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

C++ Discussion :

La mémoire ne peut pas être "written"


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut La mémoire ne peut pas être "written"
    Bonjour à tous !

    Dans le cadre de mon projet de gestion de tournoi, j'ai créer via Qt une fenêtre visant à éditer les participants ajoutés au préalable (c'est à dire modifier nom, prénom, pseudo, team..)
    Pour le nom tout fonctionne bien mais lorsque je veux éditer le prénom ou pseudo, une erreur
    "Linstruction à 0x77c17b19 emploie la mémoire 0x00000000, la mémoire ne peut pas être "written"
    Je ne sais pas d'où celà provient, voici le code s'il peut vous être utile :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    void eparticipants::sltEdit()
    {
        Participant *e;
        e = new Participant;
        QString qspart = ui->LineEP->text();
        char * argnom;
        char * argprenom;
        char * argpseudo;
        char * argnomteam;
        QString qsnom = ui->LineENom->text();
        QString qsprenom =ui->LineEPrenom->text();
        QString qspseudo = ui->LineEPseudo->text();
        QString qsteam = ui->LineETeam->text();
     
        if(ui->LineENom->text().isEmpty())
            argnom = e->getNom();
        if(ui->LineEPrenom->text().isEmpty())
            argprenom = e->getPrenom();
        if(ui->LineEPseudo->text().isEmpty())
            argpseudo = e->getPseudo();
        if(ui->LineETeam->text().isEmpty())
            argnomteam = e->getNomTeam();
        ifstream FILE_1("participants",ios::binary|ios::in);
        ofstream FILE_2("P2",ios::binary|ios::out);
        FILE_1.read((char *)e, sizeof(Participant));
        while (e->getPrenom()!=qspart && e->getPseudo() != qspart && e->getNom() != qspart && !(FILE_1.eof()))
           {
             FILE_2.write((char *)e, sizeof(Participant));
             FILE_1.read((char *)e, sizeof(Participant));
           }
        FILE_1.read((char *)e, sizeof(Participant));
        while (!FILE_1.eof())
              {
                    FILE_2.write((char *)e, sizeof(Participant));
                    FILE_1.read((char *)e, sizeof(Participant));
              }
        FILE_2.close();
        FILE_1.close();
     
        ifstream FILE_3("P2",ios::binary|ios::in);
        ofstream FILE_4("participants",ios::binary|ios::out);
         FILE_3.read((char *)e, sizeof(Participant));
            while(!FILE_3.eof())
            {
                 FILE_4.write((char *)e, sizeof(Participant));
                 FILE_3.read((char *)e, sizeof(Participant));
            }
            FILE_3.close();
            FILE_4.close();
     
            if(!(qsnom.isEmpty()))
            {
                strncpy (argnom, qsnom.toUtf8().data(),qsnom.length());
                argnom[qsnom.length()]='\0';
            }
            if(!(qsprenom.isEmpty()))
            {
                strncpy (argprenom, qsprenom.toUtf8().data(),qsprenom.length());
                argprenom[qsprenom.length()]='\0';
            }
            if(!(qspseudo.isEmpty()))
            {
                strncpy (argpseudo, qspseudo.toUtf8().data(),qspseudo.length());
                argpseudo[qspseudo.length()]='\0';
            }
            if(!(qsteam.isEmpty()))
            {
                strncpy (argnomteam, qsteam.toUtf8().data(),qsteam.length());
                argnomteam[qsteam.length()]='\0';
            }
            Participant *a;
           a = new Participant;
        ofstream FILE_ECRI("participants",ios::binary|ios::app);
        if(!a->enregParticipant(argnom, argprenom, argpseudo, argnomteam))
              QMessageBox::critical(this, "Edition", "Erreur de modification du participant");
         if(FILE_ECRI.write((char *)a, sizeof(Participant)))
            QMessageBox::information(this,"Edition","participant modifié avec succès!");
         FILE_ECRI.close();
         remove("P2");
         QDialog::hide() ;
    }
    Voila en espérant que vous pourrez me débloquer je vous remercie à l'avance !

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    c'est quelle ligne qui donne cette erreur?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  3. #3
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 350
    Points
    4 350
    Par défaut
    Vu le message, je pense que tu cherches à écrire dans quelque chose qui a été effacé ou non initialisé.

    Tu dois avoir un free() qui traîne quelque part.
    Ou alors, c'est un problème de pointeur, qui pourrait venir de tes FILE.close().

    Tu as essayé de fermer tous les fichiers à la fin plutôt qu'en cours de traitement ?
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Ca va être difficile de deviner comme ça. Entre les casts, les pointeurs, les ouvertures de fichier et les char *, il y a beaucoup de sources d'erreur. Il faudrait déjà que tu compiles en debug et que tu relances ton programme. Tu sauras alors la ligne incriminée. Si tu utilises QtEditor, cela se fait en deux clics. Sinon, tu dois jouer avec un pointeur qui est NULL mais lequel ? Je te conseille aussi de lire la page suivante http://cpp.developpez.com/faq/cpp/?p...ERS_read_write.

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    A vue de nez c'est un problème de tes strncopy. En effet, tu cherches à faire des copies sur des variables pointeurs pour lesquelles il n'y a aucune allocation mémoire (argnom, argprenom etc...) On se demande d'ailleurs pourquoi tu n'utilises pas string à la place...
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Je mise sur les lignes FILE_1.read((char *)e, sizeof(Participant)); et toutes ses petites sœurs qui suivent (aussi bien en lecture qu'en écriture). Je doute que la sérialisation soit maîtrisée.
    Mon conseil : Bien débuter en C++

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Je mise sur les lignes FILE_1.read((char *)e, sizeof(Participant)); et toutes ses petites sœurs qui suivent (aussi bien en lecture qu'en écriture)
    Pourtant dés le début il écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Participant *e;
    e = new Participant;
    En tout cas les paris sont ouverts
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Suffit que Participant aie un pointeur comme membre ou une fonction virtuelle par expl pour que ça donne des résultats fantaisistes. Sans parler d'éventuels pbs d'alignement, de boutisme ou de taille de type si écriture/lecture ne sont pas faits par les mêmes appli.

Discussions similaires

  1. La mémoire ne peut pas être written
    Par gbsatti dans le forum C
    Réponses: 1
    Dernier message: 21/04/2009, 16h04
  2. la mémoire ne peut pas être "written"
    Par zouzou1949 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 17/12/2006, 14h16
  3. Mémoire ne peut pas être read
    Par tedparker dans le forum Access
    Réponses: 4
    Dernier message: 27/09/2006, 11h54
  4. Liens URL : La mémoire ne peut pas être "read" ?
    Par fredfred dans le forum Windows XP
    Réponses: 4
    Dernier message: 28/07/2006, 08h48

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