我正在編寫一個樣本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