Я новичок в C ++. Я получаю ОШИБКУ КОРРУПЦИИ. Любая помощь будет высоко оценена. Ниже мой код
class CEntity
{
//some member variables
CEntity(string section1,string section2);
CEntity();
virtual ~CEntity();
//pure virtual function ..
virtual CEntity* create()const = 0;
};
Я получаю CLine из CEntity, как показано ниже
class CLine:public CEntity
{
// Again some variables ...
// Constructor and destructor
CLine(string section1,string section2);
CLine();
~CLine();
CLine* Create() const;
}
// CLine Implementation
CLine::CLine(string section1,string section2) : CEntity(section1,section2){};
CLine::CLine();
CLine* CLine::create() const {return new CLine();}
У меня есть другой класс CReader, который использует объект CLine и заполняет его в мультикарте, как показано ниже
class CReader
{
public:
CReader();
~CReader();
multimap<int,CEntity*>m_data_vs_entity;
};
//CReader Implementation
CReader::CReader()
{
m_data_vs_entity.clear();
};
CReader::~CReader()
{
multimap<int,CEntity*>::iterator iter;
for(iter = m_data_vs_entity.begin();iter!=m_data_vs_entity.end();iter++)
{
CEntity* current_entity = iter->second;
if(current_entity)
delete current_entity;
}
m_data_vs_entity.clear();
}
Я читаю данные из файла и затем заполняю класс CLine. Карта заполняется функцией класса CReader. Поскольку в CEntity есть виртуальный деструктор, я надеюсь, что часть кода в деструкторе CReader должна работать. На самом деле, он работает для небольших файлов, но я получаю HEAP CORRUPTION ERROR при работе с большими файлами. Если что-то в корне не так, то, пожалуйста, помогите мне найти это, так как я уже некоторое время ломаю голову.
Заранее спасибо и ожидаю ответа,
С уважением,
Атул
Продолжение с Y'day:
Дальнейшее подробное изучение этого вопроса позволило мне понять, что ошибка размещения кучи в моем случае заключается в том, что я что-то выделяю, а затем перезаписываю это большим размером.
Ниже приведен код, где мои данные заполняются в конструкторе.
CEntity::CEntity(string section1,string section2)
{
size_t length;
char buffer[9];
//Entity Type Number
length = section1.copy(buffer,8,0);
buffer[length]='\0';
m_entity_type = atoi(buffer);
//Parameter Data Count
length = section1.copy(buffer,8,8);
buffer[length]='\0';
m_param_data_pointer = atoi(buffer);
//.... like wise ....
}
Я получаю значения с фиксированным интервалом в 8 символов, и я добавляю '\ 0', так что это, я думаю, позаботится о любом значении мусора, с которым я столкнусь.
О
Ошибка выделения кучи: после обычного блока (XXX) в XXX CRT обнаружил, что приложение записало в память после завершения буфера кучи. В основном, ошибки выделения кучи происходят где-то еще, чем там, где происходит сбой. Я был бы признателен, если бы кто-нибудь здесь помог мне, как использовать этот нормальный блок и адрес.
Спасибо,