Дык, ёлки!
Всё верно, точнее у VladimirYU ошибка. Он обявил указатель на массив из двух TBase:
TBase *Obj[2];
Не забываем что массив в си есть указатель на первый элемент массива, имеет тип *TBase. Так, Obj есть указатель на указатель на первый элемент массива из TBase.
Первой строкой разименовал указатель (Obj[0] == *(Obj+0)), записал туда указатель на свежесозданный экземпляр TBase. Имеем указатель на указатель на массив, первый элемент которого проинициализирован:
Obj[0] = new TBase( A,

;
Вторая строка записывает указатель на свжесозданный экземпляр TBase по адресу Obj + 1:
Obj[1] = new TBase( C, D);
А это ошибка, т.к. используем указатель как массив, в итоге обращаясь к незанятой ячейки памяти.
Всё равно что объявить
TBase* pointer1;
и затем обратиться
*(pointer1 + 1) = bla bla;
Отсюда и неправильное поведение программы. Надо внимательнее, это же си.
Сообщение отредактировал SmSp - Sep 18 2009, 11:46