Жил был проект. Жил себе нормально. Куча кривого кода, огромные размеры. Ну в общем всё как у всех.
И вот было принято решение один компонент проекта из сервиса EXE переделать на Dll.
Всё было сделано за пол дня. В принципе в коде ничего не менялось, и даже какая то часть проекта работает, но есть и непонятные проблеммы. А именно, есть такое место:
//
// Место 1
// mPhasePropertyMap - унаследован от std::map
//
for ( ULONG i = 1; i <= newQrePhases; i++ )
{
m_mPhasePropertyMap.Insert( i );
void* p = &m_mPhasePropertyMap[1]; // Значение p=0x00000010
}
//
// Реализация Insert
//
....
....
....
BvObject::PropertyContainer pc = DefaultContainer( pTable );
insert( value_type( nContainerID, pc) );
void * p = &this[nContainerID]; // значение p, при nContainerID=1, 0x01b589ac
Фактически происходит то, что после выхода из функции std::map возвращает неправильное (другое) значение. Это может быть стек?
ps:
BC только ругается на выделения памяти по global_operator_new, а освобождения по free
Posted via RSDN NNTP Server 1.9 gamma