Salut,
Je me résous à solliciter votre aide car je ne comprends vraiment pas le problème de mon code.
J'ai un vecteur (appelé "zobi") contenant des pointeurs vers des objets d'une classe que j'ai créée. Ces objets sont listés dans un TListView. Quand je clique sur un élément du TListView (correspondant à un objet du vecteur), je vérifie une propriété de l'objet en question et je crée dynamiquement des TLabeledEdit en nombre variable (4 ou 5 selon l'objet).
Bon, j'ai rien fait d'original (cf. le code plus bas) : quand l'utilisateur clique sur la liste, je repère qui a été cliqué, je consulte l'objet à travers le vecteur, j'en déduis de combien de TLabeledEdit j'ai besoin et je les crée dans une boucle. Pour garder une trace, je stocke les pointeurs vers ces TLabeledEdit dans une TList (appelée "zobo"). A chaque fois qu'un élément du TListView est cliqué, je détruis tous les TLabeledEdit, je vide la TList et j'en crée de nouveaux.
A l'exécution, si j'ai 2 éléments dans le vecteur (et donc la TListView), je clique le premier, ça roule, les TLabeledEdit apparaissent. Je clique sur le suivant plantage tentative d'écriture à l'adresse 0x0000000. Au pas-à-pas, ça arrive à la ligne "TLabeledEdit *NewEdit = new TLabeledEdit(Form1);".
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 void __fastcall TForm1::ListView1Click(TObject *Sender) { ItemSelec = -1; if (ListView1->ItemIndex >= 0) ItemSelec = ListView1->ItemIndex; if (ItemSelec >= 0) { if (zobo->Count > 0) { for (int i = zobo->Count - 1 ; i >= 0 ; i--) { delete (TLabeledEdit* )zobo->Items[i]; } } zobo->Clear(); for (int i = 0 ; i < zobi.at(ItemSelec).GetParamNb() ; i ++) { TLabeledEdit *NewEdit = new TLabeledEdit(Form1); //TLabeledEdit *NewEdit = new TLabeledEdit(this); zobo->Add(( void*)NewEdit); NewEdit->Text = FloatToStr(zobi.at(ItemSelec).GetIndParam(i)); NewEdit->EditLabel->Caption = "Parameter " + IntToStr(i); NewEdit->Parent = Form1->Panel1; NewEdit->Left = 10; NewEdit->Top = zobo->Count * 40; } } }
La même erreur arrive dans d'autres circonstances, c'est juste un exemple.
Pourquoi ?
Dites moi s'il vous faut plus de détails et merci d'avance.
Partager