Здравствуйте Alex, вы писали:
A>Не скажу, что я крут в С++, но сам уже разобраться в проблеме не могу. Подскажите, пожалуйста, где я ошибся: A>(создано из VC++ 6, как консольное приложение с поддержкой MFC)
A>void CItem::SetValue(CDBVariant fieldValue) A>{ A> value = fieldValue; A>}
A> CItem item; A> for (int i = 0; i < 10; i++) { A> CDBVariant value; A> value.m_dwType = DBVT_STRING; A> value.m_pstring = new CString("10.8"); A>// value.m_dwType = DBVT_DOUBLE; // а вот если эти две строчки раскомментировать, а верхние две закомментировать, A>// value.m_dblVal = 10.8; // то все работает без ошибок!!! A> item.SetValue(value); A> } // ПАДАЕТ ВОТ НА ЭТОМ МЕСТЕ!!!!
В общем, рискну предположить что фишка в следующем:
У CDBVariant'а нет copy-конструктора, поэтому твое присваивание приводит к простому копированию памяти. После чего у тебя получается 2 указателя на один и тот же CString, что приводит к попытке двойного его освобождения.