J'écrivais un exemple de programme C++ pour expérimenter le polymorphisme et les cartes. J'ai la carte suivante:C++ std :: map échoue sur "*"?
map<char,Operation*> ops;
ops['+'] = new Addition();
ops['-'] = new Subtraction();
ops['*'] = new Multiplication();
ops['/'] = new Division();
chaque classe hérite de Operation
et fait l'opération suggérée par son nom.
Everytrhing fonctionne correctement, mais lorsque j'accède au ops['*']
, le programme plante. Si j'utilise un autre char
, dire ceci:
ops['x'] = new Multiplication();
le fonctionnement du programme.
L'ensemble de la fonction main
est la suivante:
int main(int argc, char** argv){
int x = atoi(argv[1]);
char op = argv[2][0];
int y = atoi(argv[3]);
map<char,Operation*> ops;
ops['+'] = new Addition();
ops['-'] = new Subtraction();
ops['*'] = new Multiplication();
ops['/'] = new Division();
cout<<ops[op]->op(x,y)<<endl;
}
Je répète mon problème:
Si je passe 1 * 1
au principal, un accident se produit (SegmentationFault
).
Si je modifie le code et passe 1 x 1
cela fonctionne très bien.
Y a-t-il quelque chose qui me manque de std::map
? Peut-être quelque chose lié à *
étant utilisé comme un caractère générique ou quelque chose?
rechercher le terme « fuite de mémoire » et ne jamais utiliser 'new' nouveau. – nwp
'*' est un caractère spécial dans un grand nombre de shells, qui se développe essentiellement dans tous les fichiers du répertoire en cours. Essayez de passer '1 \ * 1'. – Holt
@nwp Ce n'est pas une fuite si je nettoie quand je le devrais. Ici, je ne le fais pas parce que c'est un programme de jouets et tout meurt tout de suite! – magicleon