我有一个名为Company
的抽象类,一个typedef typedef Company* CompanyP;
和以下地图:
map<string, CompanyP> companies;
当我将公司添加到程序中时,它正在使用insert
和make_pair
函数,如下所示:
companies.insert(make_pair(companyName, new Stock(...)));
(Stock
的基类为Company
)
据我所知,该对的second
部分正在指向我使用new
分配的此对象的指针,因此我应该能够在以后delete
部分代码。
那么为什么当我在一个名为的不同函数中得到以下代码时
removeCompany
,我收到运行时错误? (compList
是一个字符串数组,包含所有现有函数的键):
// Delete the company and than delete the pointer from the map
cout << companies.find(compList[cmd - 1])->first << endl;
delete companies.find(compList[cmd-1])->second;
cout << "The company \"" << compList[cmd-1] << "\" has been removed." << endl;
companies.erase(compList[cmd - 1]);
我知道使用带有cout
命令的第一行键是正确的,因为它正确地显示find
函数确实找到了正确的对,但是当调试器进入删除命令时得到运行时错误_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
。
我已经研究过其他问题,但它们都是使用错误指针的例子。在这里我使用指向派生类的基类指针,这可能是问题吗?