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++Builder Discussion :

Erreur List Index Out Of Bound


Sujet :

C++Builder

  1. #21
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Pour la destruction moi je fais comme ca

    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
     
    for(int i = (ListeValeurEcriture->Count - 1); i >= 0; i--)
    {
       TCoupleInt *CoupleInt = (TCoupleInt *)(ListeValeurEcriture->Items[i]);
     
       delete CoupleInt;
       CoupleInt = NULL;
    }
     
    ListeValeurEcriture->Clear();
    delete ListeValeurEcriture;
    ListeValeurEcriture = NULL;
     
    for(int i = (ListeValeurLecture->Count - 1); i >= 0; i--)
    {
       TCoupleInt *CoupleInt = (TCoupleInt *)(ListeValeurLecture->Items[i]);
     
       delete CoupleInt;
       CoupleInt = NULL;
    }
     
    ListeValeurLecture->Clear();
    delete ListeValeurLecture;
    ListeValeurLecture = NULL;
    tu peux utiliser un for puisque tu connais le nombre d'éléments contenu dans ta liste.

  2. #22
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    bon, ben jai toujours des erreur d'accé memoire, ou de list out of band, malgré le fait que je sois sur que j'accede jamais a des valeur eroné ...

    Est ce que c'est possible que sa vienne du fait que je trace trois série dans un TChart dans un thread ?
    Parceque c'est quand je trace cette courbe que sa le fait le plus souvent

    voila le code mais comme dis je n'en suis pas sur, quand jai l'erreur il ne me montre pas ou sa c'est produit il m'ouvre juste la fenetre avec les ligne assebleur mais je ne sais pas ou sa se produit

    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
     
      AnsiString asTmp = "";
     
            Form1->bPremPression = true;
            Sleep(Form1->iTpsAttente);
            while(Form1->bFinThread)
            {
              try
              {
                    while(AccesDataRead(4251,0) && Form1->bFinThread)
                    {
                            Form1->TimerSecu->Enabled = true;
                            Form1->iPF1 = 1;
                            if(Form1->bPremPression == true)
                            {
                                    asTmp = TimeToStr(Now()) + "\r" + DateToStr(Now());
                                    Form27->Series1->AddXY(Now(), AccesDataRead(4110), asTmp, clRed);
                                    Form27->Series2->AddXY(Now(), AccesDataRead(4111), asTmp, clBlue);
                                    Form27->Series3->AddXY(Now(), AccesDataRead(4112), asTmp, clYellow);
                                    Form1->bPremPression = false;
                            }
                            else
                            {
                                    Form27->Series1->AddXY(Now(), AccesDataRead(4110), TimeToStr(Now()), clRed);
                                    Form27->Series2->AddXY(Now(), AccesDataRead(4111), TimeToStr(Now()), clBlue);
                                    Form27->Series3->AddXY(Now(), AccesDataRead(4112), TimeToStr(Now()), clYellow);
                            }
                            Sleep(Form1->iEchantillonage);
                    }
                    Form27->LabelTrace->Visible = false;
                    Form1->TimerSecu->Enabled = false;
                    Form1->iTimerSecu = 0;
                    Form1->bPremPression = true;
                    Sleep(Form1->iTpsSleepThreadSecond);
                    Form1->iPF1 = 0;
              }
              catch(...)
              {
                    Form1->iListAla->Insert(0, "ERREUR PENDANT LE THREAD PF1");
                    Form1->iListAla->SaveToFile(Form1->RepAppli+"ListAlarme.txt");
                    ShowMessage("PF1");
              }
            }
    }
    javais meme eseyer de metre un try catch mais il ne rentre pas dedans :s

  3. #23
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Je ne sais plus si tu peux faire afficher des ShowMessage dans un Thread car tu pourrais en mettre à certains endroit pour pouvoir repérer à quelle ligne ca plante.

    Sinon tu pourrais juste pour voir te créé une sort de Log qui te note ce qu'il fait, tu verrais ainsi ou cela s'arrête.

    Je l'avais fait moi aussi pour identifier une erreur que je ne trouvais pas et cela m'a bien aider. Bien sur, cela va ralentir ton appli mais c'est juste pour tester, après tu peux l'enlever.

  4. #24
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    ce qui m'enerve c que c'est trop aleatoire pour etre localiser précisement :s

    Et le pire c'est que la plupart du temps sa ne plante pas l'appli c'est juste un showmessage avec logo ereur a coté, clike sur ok et tous continue comme si de rien été, bien que parfois apres la form de la courbe ne souvre plus, ou des thread s'arrete ... parfois meme juste en cliquan sur un bouton donc le code est Form->Show sa me met une erreur d'accée memoire


    GRRRRRR je desespere, en plus sur certain pc sa le fais moin que sur d'autre

    Le point positif est que pour le moment grace a vous jai pu rendre le prog plus propre a laide des class et des list

  5. #25
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Ce n'est pas que c'est pas propre avec des tableaux mais c'est beaucoup plus chiant à gérer car il faut allouer l'espace alors qu'avec les listes, il s'alloue à la création de l'objet.

    Pour tes erreurs, il faurais arriver à identifier précisément la ligne qui plante, et c'est là que c'est difficile.

  6. #26
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    ben, moi perso ce que je comprend pas c'est que ces lignes sont traité tres regulierement toute les 100ms envirron mais parfois pendant plusieur heure jai aucune erreur ... dans ma ptite tete si c une ligne qui provoque ce défaut il devrais apparaitre a chaque fois non ?


    pour l'allocation des Tlist ben faut kand meme alouer a chaque fois les class lol donc le resultat est le meme non ? :p mais je préfére quand meme avec les TList c'est plus pro :p

  7. #27
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Oui avec les liste, tu alloues un objet de la classe, mais c'est beaucoup plus simple de rajouter des éléments que dans un tableau, car pour ton tableau, il faut allouer de l'espace supplémentaire pour ton tableau, alors que pour la liste non, tu crée ton objet et tu l'ajoute dans la liste, Pour moi cela semble plus simple.

    Sinon pour ton erreur, je ne vois pas comment faire, sans savoir quelle ligne plante. Si quelqu'un à une idée

  8. #28
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    je pense avoir résolue mon prob

    En fait jai 9 thread qui accéde au donnée.
    Chaque thread est dans une boucle infini avec un sleep a la fin de la boucle.

    Javais ce sleep a 10 ms.
    La jai paser ce sleep a 100ms, et jai plus aucun message du week end ... vous pensez que sa peut venir de la ?

  9. #29
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Je ne sais pas du tout, cela peut dépendre de la façon dont tes Thread accèdent au données. Peut être que tes thread accèdaient au même élément en même temps. L'accès en lecture vérouille l'accès il me semble mais je suis pas sur

  10. #30
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Nan c'est pas possible qu'il accédais au meme élement, a la meme List oui, mais plusieur thread n'accede pas au meme items de la list. Chaque Thread a ces items auquel il accéde de maniere reguliere pour metre a jour l'affichage des differente vue, tracer des courbes, imprimer les courbes les exporter etc

    Bon a priori cela fonctionne avec un sleep de 100 ms au lieu de 10ms, je touche du bois pour que sa soit sa.
    De toute maniére le thread de communication avec l'automate mes environ 200ms a rafraichir les 450 mots, donc tous ce qui mimporte c'est de rester en desous des 200ms

    Voili voilou, je vous tien au courant

Discussions similaires

  1. Erreur Python : list index out of range
    Par mmmppp dans le forum Général Python
    Réponses: 4
    Dernier message: 15/10/2011, 21h59
  2. list index out of bounds
    Par sasaas dans le forum Débuter
    Réponses: 1
    Dernier message: 13/01/2009, 17h54
  3. [socket]Erreur List Index Out Of Bound
    Par afrodje dans le forum C++Builder
    Réponses: 1
    Dernier message: 23/06/2008, 16h43
  4. Message d'erreur : Liste index out of bounds (-1)
    Par valer dans le forum Langage
    Réponses: 7
    Dernier message: 25/04/2008, 08h50
  5. Réponses: 15
    Dernier message: 31/03/2007, 16h32

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