我正在编写一个样本C++程序来试验多态性和地图。 我有以下地图:C++ std :: map在“*”上失败?
map<char,Operation*> ops;
ops['+'] = new Addition();
ops['-'] = new Subtraction();
ops['*'] = new Multiplication();
ops['/'] = new Division();
每个类从Operation
继承和不通过其名称所建议的操作。
Everytrhing正常工作,但是当我访问ops['*']
程序崩溃。如果我使用一个不同的char
,这样说:
ops['x'] = new Multiplication();
程序工作。
整个main
功能是这样的:
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;
}
我会重复我的问题:
如果我通过1 * 1
到主,发生崩溃(SegmentationFault
)。
如果我编辑代码并通过1 x 1
它工作正常。
有什么我失踪的std::map
?也许有关*
被用作通配符或什么?
查找术语“内存泄漏”,然后从不使用'new'一次。 – nwp
'*'是大量shell中的特殊字符,基本上扩展为当前目录下的所有文件,尝试通过'1 \ * 1'。 – Holt
@nwp如果我应该清理它,这不是泄漏。在这里,我不是因为这是一个玩具程序而且一切都马上消失! – magicleon