J'ai un std::map
où j'enregistrer un pointeur vers une classe. Dans le constructeur de la classe, plusieurs valeurs sont passées, de sorte que les variables de la classe ont une valeur réelle. Mon problème ici est que le mot-clé this
crée une erreur de segmentation lorsque j'appelle une fonction de cette classe qui utilise l'une des variables précédemment définies. Cela ressemble à cela en détail (version courte):"this" mot-clé provoque une erreur de segmentation
Command::Command(const char *name, commandHandler h) // commandHandler is a function pointer
{
this->name = name;
this->handler = h;
}
Command::execute(int cn, std::vector<char *> args)
{
if (this->handler != NULL) // "this" is according to gdb a pointer to a class Command at 0x0
(handler)(cn, args);
}
La carte est dans une classe statique, les éléments cartographiques sont insérés dans une fonction statique.
Edit: En raison des commentaires et réponses (gars merci): j'ajouter le pointeur à la classe dans une registerCommands de fonction() qui crée essentiellement des pointeurs à l'aide Command *command_xxx = new Command("xxx", &(handler_func));
et met que dans une carte dans une classe statique. L'appel provient d'une autre méthode de la même classe que la carte et de la fonction registerCommands(). Le pointeur de classe est obtenu en utilisant commands.find("xxx")->second;
qui renvoie null -> null pointeur.
Afficher le numéro – Kal
Selon le contexte, le problème exact ne peut pas être déterminé. En fonction de la description, l'objet sur lequel vous voulez appeler la fonction est perdu ou vous fournissez un pointeur amusant (par exemple, un pointeur nul) lors de l'appel de la fonction membre. –