Переключение на Главную Страницу Страницы: 1 2 [3] 4 5  ОтправитьПечать
Очень популярная тема (более 25 ответов) Ошибка наследования или проблемы ИТЗ? (число прочтений - 15170 )
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #30 - 27. Февраля 2008 :: 09:38
Печать  
kms писал(а) 27. Февраля 2008 :: 09:27:
Я прекрасно понимаю, что с профессиональной точки зрения, меня здесь могут понять полтора человека.


Нда... Скромно так...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #31 - 27. Февраля 2008 :: 09:41
Печать  
artbear писал(а) 27. Февраля 2008 :: 09:26:
Код
Выбрать все
SGCData* pData = pContextInfo->m_pData;
	bool bNeedDeleteData = !pData->m_Destroy;
	delete pContextInfo;
	if (bNeedDeleteData)
		delete pData;
 



Расшифровываю для тебя:
вызов п.2 - это
Код
Выбрать все
				~SGCInfo(){m_pData->Remove();} 


Вызыывает
Код
Выбрать все
		void SGCData::Remove()
		{
			if(m_Destroy)
				delete this;
		}
 


ни о чем тебе не говорит, а?

И что, при повторном получении SGCData из m_DataMap проблем с получением удаленных данных не будет?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #32 - 27. Февраля 2008 :: 09:42
Печать  
sadovnikov писал(а) 27. Февраля 2008 :: 09:38:
kms писал(а) 27. Февраля 2008 :: 09:27:
Я прекрасно понимаю, что с профессиональной точки зрения, меня здесь могут понять полтора человека.


Нда... Скромно так...

Из тех, кто еще остался здесь, к сожалению. Печаль
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #33 - 27. Февраля 2008 :: 09:46
Печать  
kms писал(а) 27. Февраля 2008 :: 09:01:
Код
Выбрать все
void CGCBoost::RefreshGroupContextData(CGroupContext* pGroupContext)
...
delete [] m_pMyVTable;
 



Человек, который ВЫШИБАЕТ VTBL изо ВСЕХ активных контекстов - НЕ ДОЛЖЕН браться за такие вещи, как TurboBL.
Это не ошибка, это отсутствие понимания того, что ты делаешь.
И если логика отсутствует как класс, никакие тесты здесь не помогут.

С таким уровнем, Артур, я не считаю, что тебе стоит заниматься чем-то, кроме прикладных классов, от которых ничего не зависит.

Смотрим и этот пункт
Мой код
Код
Выбрать все
	delete [] m_pMyVTable;
	m_pMyVTable = NULL;

	SGCInfo* pContextInfo = reinterpret_cast<SGCInfo*>(pGroupContext->m_FlagAutoDestroy);

	// TODO возможен лик при выделении виртуальной таблицы
	Boost(pMod, optimize);

// п. 1
 


Далее в CGCBoost::Boost написано
Код
Выбрать все
BOOL CGCBoost::Boost(CBLModule7 *pMod, BOOL optimize)
{
....
	if(!m_pMyVTable)
	{
		//m_pRealVTable=*(DWORD**)pCont;
		m_pRealVTable = addrVTable;
		CGCBoost* pBoost=new CGCBoost;
		DWORD* pMyVTable=*(DWORD**)pBoost;
		delete pBoost;
		m_pMyVTable=new DWORD[64]; // TODO лик ?
		memcpy(m_pMyVTable,m_pRealVTable,256);

		m_pMyVTable[18]=pMyVTable[18];	// GetNProps artbear
		m_pMyVTable[19]=pMyVTable[19];	// FindProp
		m_pMyVTable[20]=pMyVTable[20];	// GetPropName artbear
		m_pMyVTable[21]=pMyVTable[21];	// GetPropVal
		m_pMyVTable[22]=pMyVTable[22];	// SetPropVal
		m_pMyVTable[23]=pMyVTable[23];	// IsPropReadable
		m_pMyVTable[24]=pMyVTable[24];	// IsPropWritable
		m_pMyVTable[25]=pMyVTable[25];	// GetNMethods artbear
		m_pMyVTable[26]=pMyVTable[26];	// FindMethod
		m_pMyVTable[27]=pMyVTable[27];	// GetMethodName artbear
		m_pMyVTable[28]=pMyVTable[28];	// GetNParams
		m_pMyVTable[29]=pMyVTable[29];	// GetParamDefValue
		m_pMyVTable[30]=pMyVTable[30];	// HasRetVal
		m_pMyVTable[31]=pMyVTable[31];	// CallAsProc
		m_pMyVTable[32]=pMyVTable[32];	// CallAsProc
	}

....
}
 


Этот код тебе ни о чем не говорит, а?
Я как раз этот участок кода хорошо проработал, в отличие от тебя, самого умного программиста.
Т.е. этот код выполняется непрерывно, и в до попадания в п.1 подмененная виртуальная таблица для группового контекста просто не нужна, т.к. вызовы виртуальных методов этих контекстов не выполняются.

Если ты не понимаешь логику чьей-то работы, это не говорит о том, что этой логики нет на самом деле.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #34 - 27. Февраля 2008 :: 09:50
Печать  
sadovnikov

Олег, вот если у тебя будет время, не поленись, сверь "Ответ #33" с тем, что происходит на самом деле.
Если ты согласишься, что автор ответа не понимает, о чем говорит, можешь поставить мне пиво.

По желанию, конечно Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #35 - 27. Февраля 2008 :: 09:50
Печать  
Нууу, а еще говорят, что у меня проблемы с толерастией  Очень довольный Разошлись... Да я, по сравнению с вами, наивный белый мохнатый ягненочек ! Очень довольный

PS. Лично на меня ООП всегда производило сильно "неоднозначное" впечатление. Начиная с того, что с документацией как-то не очень - многие вещи только в history можно вытащить. Заканчивая до сих пор вылезающими в разных местах косяками, не смотря на несколько лет допиливания этой системы. Из ООП мне с более-менее реальной пользой удалось прикрутить только инкапсуляцию кода. ИМХО, более перспективно создание шлюза в альтернативные языки, где вам будет и нормальное ООП, и ФП, и АОП и параллельное программирование. Скажите, это гораздо интереснее, чем привинчивать ООП к 1С?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #36 - 27. Февраля 2008 :: 09:53
Печать  
Uzhast

Не, ты погоди Улыбка

Ты на самом деле, последняя надежда раздела "Разработка".
Опять же, Ответ №33 - рекомендую. Подмигивание
  

De quelle planète es-tu?
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #37 - 27. Февраля 2008 :: 09:53
Печать  
kms писал(а) 27. Февраля 2008 :: 09:50:
sadovnikov

Олег, вот если у тебя будет время, не поленись, сверь "Ответ #33" с тем, что происходит на самом деле.
Если ты согласишься, что автор ответа не понимает, о чем говорит, можешь поставить мне пиво.

По желанию, конечно Улыбка


А зачем? Просто, я считаю, что любой спор должен, как минумум, укладываться в рамки приличия. Оскорб##ть-то друг друга зачем? Причем, не важно, кто перешел к оскорблениям первым...
А хочется полаяться - на это аська есть и личный мордобой  Подмигивание
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #38 - 27. Февраля 2008 :: 09:56
Печать  
+"Ответ #37"
А пивом я и просто так накачать могу Улыбка
Заходите в гости Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #39 - 27. Февраля 2008 :: 10:13
Печать  
sadovnikov

Моя цель - не доказать что-либо участникам форума.
Я просто не хочу как Балда "работать за троих, есть за пятерых".

Для этого нужно всего лишь, чтобы выполняемая работа каждым участником соответствовала его уровню.
Я думаю, у тебя неподготовленные люди тоже на переговоры с ключевыми клиентами не ездят.

sadovnikov писал(а) 27. Февраля 2008 :: 09:56:
+"Ответ #37"
А пивом я и просто так накачать могу Улыбка
Заходите в гости Улыбка

Ладно, на таких условиях я согласен на все, что угодно.  Очень довольный
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #40 - 27. Февраля 2008 :: 10:43
Печать  
kms писал(а) 27. Февраля 2008 :: 09:53:
Опять же, Ответ №33 - рекомендую. Подмигивание

Рискую показаться чайником, но все же приведу нить своих рассуждений.

Итак, в чем отличие объекта с виртуальными функциями от обычного объекта? У объекта с виртуальными функциями первый член данных - это vfptr. vfptr - это адрес блока адресов виртуальных функций (vtable).

Что происходит в коде RefreshGroupContextData? Вызов delete [] m_pMyVTable. Если я правильно понял, это переопределенная таблица адресов виртуальных функций для "похаченных" в TurboBL контекстов. Далее в функции Boost, если таблица адресов была удалена (или еще не была создана), она создается и инициализируется.

Не совсем уверен, как происходит на самом деле, но в худшем случае будет следующее. Если на момент вызова delete [] m_pMyVTable уже существовало несколько контекстов, использующих эту vtable, то после вызова delete эти существующие контексты вылетят в космос. Потому что, сколько объектов, столько и будет существовать vfptr. Т.к. vtable удалена, то все эти vfptr указывают на удаленную память, которая может быть задействована в ближайшем выделении памяти и заполнена совершенно левыми значениями.

Правильно я понял?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #41 - 27. Февраля 2008 :: 10:49
Печать  
Возможно, что я чего-то на самом деле не учел в итоге, но это не дает тебе право высказываться подобным образом.
Ошибки бывают у всех и всегда.
А команда - она и есть команда, чтобы совместно их исправлять.
Все равно вся наша жизнь - это учеба.

Свой код в ТурбоБЛ сегодня еще раз пересмотрю.

ЗЫ например, я пришел в 1С++ после того, как мне надоело наблюдать за постоянными багами, допускаемыми с твоей стороны при разработке, было это пару лет назад.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #42 - 27. Февраля 2008 :: 10:50
Печать  
Uzhast писал(а) 27. Февраля 2008 :: 10:43:
Если на момент вызова delete [] m_pMyVTable уже существовало несколько контекстов, использующих эту vtable, то после вызова delete эти существующие контексты вылетят в космос. Потому что, сколько объектов, столько и будет существовать vfptr. Т.к. vtable удалена, то все эти vfptr указывают на удаленную память, которая может быть задействована в ближайшем выделении памяти и заполнена совершенно левыми значениями.

Правильно я понял?

Точно.

artbear писал(а) 27. Февраля 2008 :: 09:46:
Я как раз этот участок кода хорошо проработал, в отличие от тебя, самого умного программиста.
Т.е. этот код выполняется непрерывно, и в до попадания в п.1 подмененная виртуальная таблица для группового контекста просто не нужна, т.к. вызовы виртуальных методов этих контекстов не выполняются.

Если ты не понимаешь логику чьей-то работы, это не говорит о том, что этой логики нет на самом деле.


Вот так. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #43 - 27. Февраля 2008 :: 10:52
Печать  
artbear писал(а) 27. Февраля 2008 :: 10:49:
А команда - она и есть команда, чтобы совместно их исправлять.

Нет.
У меня другие представления о команде.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Ошибка наследования или проблемы ИТЗ?
Ответ #44 - 27. Февраля 2008 :: 10:54
Печать  
Мужики, хватит уже, вы мне плохой пример подаете  Очень довольный
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 
ОтправитьПечать