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!!