Из болезненного любопытства я снова посетил этот вопрос, чтобы посмотреть, расшифровал ли его кто-либо.
Единственная очевидная проблема, которую я вижу с исходным кодом, заключается в BabyLayer :: GetBaby ():
Baby n = Baby();
n.setNull(true);
if(x >= Width || x <0)
return &n; // Bad.
if(y >= Height || y < 0)
return &n; // Bad.
Вы объявляете новый экземпляр Baby в стеке, а затем возвращаете указатель на него.Экземпляр Baby с именем 'n' разрушается, когда возвращается GetBaby (), и возвращаемый указатель теперь недопустим.
Я не знаю, какой компилятор вы используете, но Visual Studio 2010 испускает ", предупреждение C4172: возвращение адреса локальной переменной или временной "в этих строках.Обратите внимание, что ваш пример кода неполон и на самом деле ничего не делает, мне пришлось объявить экземпляр BabyCube для получения этого предупреждения.
Поскольку я не могу расшифровать, что должен делать ваш код, и могу сделатьнет смысла в его работе, я не могу объяснить, почему выбрасываются исключения доступа к памяти.