Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters
Register

Reply
 
LinkBack Thread Tools
Old 31.07.2002, 22:24   #16
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Post

итак, пример:
Code:
struct B1
{
	virtual ~B1() { }
	int i;
};	

struct B2
{
	virtual ~B2() { }
	char* ss;
};	

struct D: B2, B1
{};

int
main()
{
	D* d = new D;
	d->ss = new char[3];
	B1* b1 = (B1*)(void*)d;
	b1->i = 0;
	cout << d->ss;

	return 0;
}
Reply With Quote
Old 01.08.2002, 15:21   #17
Младенец
 
Artsrun Ohanyan's Avatar
 
Join Date: 01 2002
Location: Nor Hajen
Posts: 12
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Post

Quote:
Originally posted by Aram Hambardzumyan:
вот код:
Code:
struct B1 { };	

struct B2 { };	

struct D: B2, B1 { };

int main()
{
	B1* b1 = new D;
	delete b1;

	B2* b2 = new D;
	delete b2;

	return 0;
}
код иллюстрирует очередной баг ms-компилера. суть: при динамическом создании объекта с двойным наследованием он не может правильно удалить его. программа вылетает при попытке стереть по одному из базовомых указателей, который не совпадает с указателем на весь объект (в зависимости от того, в каком порядке B1 и B2 стоят в списке базовых классов, вылетает при стирании либо через B1*, либо B2*). и это не только в 6-ой версии, но и в 7-ой подсистема динамической памяти пытается найти соостветствующий адрес среди аллоцированных, и не находит
поделитесь опытом борьбы с этим багом
Aram, miangamayn vstahoren karox em asel, vor aystex bug chka,
Qo kodi grarman &isht exanakn e
Code:
struct B1 { virtual ~B1(){} };	
struct B2 { virtual ~B2(){} };	
struct D: B2, B1 { virtual ~D(){} };
int main()
{	
	B1* b1 = new D;	
	delete b1;	
	B2* b2 = new D;	
	delete b2;	
	return 0;
}
Ays problemi ( yev voch te bug-i ) masin hstak nshvats e Stroustrup-i "The C++ Programming language" grqi 478-rd ejum.
compilyator@ chi karox imanal object-i irakan chaps@ operator delete()-i hamar. Miak lutsumn e virtual destructor0i avelatcum@ bazayin class-um.
Have fun!!
__________________
Best of luck!
Reply With Quote
Old 01.08.2002, 16:43   #18
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Post

Quote:
Originally posted by Artsrun Ohanyan:
Qo kodi grarman &isht exanakn e
Code:
struct B1 { virtual ~B1(){} };	
struct B2 { virtual ~B2(){} };	
struct D: B2, B1 { virtual ~D(){} };
int main()
{	
	B1* b1 = new D;	
	delete b1;	
	B2* b2 = new D;	
	delete b2;	
	return 0;
}
да, я уже обнаружил и исправил это
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 05:35.


Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.