删除动态分配的对象时出现运行时错误

时间:2016-06-13 12:14:11

标签: c++ runtime-error dynamic-memory-allocation

我有一个名为Company的抽象类,一个typedef typedef Company* CompanyP;和以下地图:

map<string, CompanyP> companies;

当我将公司添加到程序中时,它正在使用insertmake_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)

我已经研究过其他问题,但它们都是使用错误指针的例子。在这里我使用指向派生类的基类指针,这可能是问题吗?

0 个答案:

没有答案