Привет народ. Имею к класс
class CBox public CDescription,public CGeometric,public CNodes
В классе CNodes объявлены три указателя на вектора. Весктора содержат указатели на классы
BOX_NODE_COORDINATES_PNTS_VECTOR *m_p_boxDestinNodesVector;
BOX_NODE_COORDINATES_PNTS_VECTOR *m_p_boxDeltasNodesVector;
BOX_PLACES_PNTS_VECTOR *m_p_placesVector;
Сделал диалог главное окно. В классе окна переменную
CBox m_activeBox;
Заполняю переменную и для теста вывожу
char buff[500];
unsigned int indx;
unsigned int size = (*m_activeBox.m_p_placesVector).size();
for(indx = 0; indx < size; indx++){
sprintf_s(buff,sizeof(buff),"MnD=%d MxD=%d Row = %d Colm = %d XPos = %d YPos = %d PosRow = %d PosColm = %d",
m_activeBox.GetMnD(),
m_activeBox.GetMxD(),
(*m_activeBox.m_p_placesVector)[indx]->Row(),
(*m_activeBox.m_p_placesVector)[indx]->Colm(),
(*m_activeBox.m_p_boxDestinNodesVector)[indx]->XPos(),
(*m_activeBox.m_p_boxDestinNodesVector)[indx]->YPos(),
(*m_activeBox.m_p_boxDestinNodesVector)[indx]->Row(),
(*m_activeBox.m_p_boxDestinNodesVector)[indx]->Colm()
);
MessageBox(buff,"");
}
Все нормально. На окне кнопка вхожу в другой диалог там мне надо сделать пару манипуляций с m_activeBox и сохранить.
В этот диалог передаю указатель на главный диалог и через него пытаюсь сохранить
void CColorTuneDlg::OnBnClickedRightFrontBtn()
{
if(m_pCD->CheckCurrentUserPermitoins() != SUFFICIENT_PERMISSIONS)return;
// m_pCD->m_activeBox.SetRx(m_HorizFront.GetPos());
// m_pCD->//m_pf_TransferBoxBottleParams(&(m_pCD->m_activeBox));
// m_pCD->m_activeBox.UpdateBox(m_pCD->m_pLocDb);
m_pCD->UpdateDestinNodes(m_pCD->m_activeBox);
m_pCD - указатель на главный диалог.
void CTestDlg::UpdateDestinNodes(CBox & box)
{
char buff[500];
CBottleBox b;
b = box;
unsigned int indx;
unsigned int size = (*b.m_p_boxDestinNodesVector).size();
for(indx = 0; indx < size; indx++)
{
sprintf_s(buff,sizeof(buff),"UPDATE Nodes SET Xpos = %d, Ypos = %d WHERE Row = %d AND Col = %d AND boxId = %d",
(*m_activeBox.m_p_boxDestinNodesVector)[indx]->XPos(),
(*m_activeBox.m_p_boxDestinNodesVector)[indx]->YPos(),
(*m_activeBox.m_p_boxDestinNodesVector)[indx]->Row(),
(*m_activeBox.m_p_boxDestinNodesVector)[indx]->Colm(),
m_activeBox.GetBoxId());
m_pLocDb->ExecuteSQL(buff);
}
}
и тут обнаруживается что переменная size содержит жуть большое число. Ну соотвественно и все другие данные в вектрах съезжают и крах.
В то же время если вызвать эту функцию в диалоге где определена переменная m_activeBox там все ОК.