Salut

J'ai implémenté le pattern command.
J'ai une classe project qui va pouvoir exécuter plusieurs command.

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);
}
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.

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.
Blablabla... The memory could not be read.
Je sais que c'est`au moment du delete pCommand; que survient cette erreur.

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...