Salut
J'ai implémenté le pattern command.
J'ai une classe project qui va pouvoir exécuter plusieurs command.
Si je créé une commande, que je l'ajoute au projet, que j'en crée une autre que j'ajoute également => aucun problème.
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 class Project { public: Project(); ~Project(); void addCommand(Command*); // ajouter une commande void start(); //exécuter les commandes private: CArray<Command*,Command*> ArrayCommands; //liste de commandes }; Project::Project() { } Project::~Project() { Command* pCommand=NULL; for (int i=0; i < ArrayCommands.GetSize() ; i++ ) { pCommand=(Command*)ArrayCommands.GetAt(i); if(pCommand) delete pCommand; } ArrayCommands.RemoveAll(); } void Project::start() { for (int i=0; i < ArrayCommands.GetSize() ; i++ ) { if(ArrayCommands.GetAt(i)) ArrayCommands.GetAt(i)->execute(); } } void Project::addCommand(Command* _Command) { ArrayCommands.Add(_Command); }
Maintenant si je souhaite exécuter plusieur fois une commande, donc je crée une seul fois, mais que j'ajoute plusieur fois au projet
Je me fais insulter à la sortie du programme.
Je sais que c'est`au moment du delete pCommand; que survient cette erreur.Blablabla... The memory could not be read.
Logiquement ce qui devrait se passer : première itération de la boucle for, pCommand pointe sur la commande créé et est ensuite délété.
2ème itération : "ArrayCommands.GetAt(i)" devrait retourner un pointeur NULL. Et donc le delete ne devrait pas avoir lieu... pourtant il a lieu...
![]()
Partager