#include <iostream>
#include <exception>
class Foo
{
int i_;
int j_;
public:
Foo(int i, int j) : i_(i), j_(j) {}
void print_coords()
{
std::cout << this << " (" << i_ << ',' << j_ << ')' << std::endl;
}
};
class Bar
{
public:
Foo *arr[5][5];
};
class Que
{
public:
void init(Bar *b)
{
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
b->arr[i][j] = new Foo(i, j);
}
void print(Bar *b, int i, int j)
{
try {
if(b->arr[i][j])
b->arr[i][j]->print_coords();
else
throw 0;
} catch (int e) {
std::cout << &b->arr[i][j] << " points to null" << std::endl;
}
}
void rem(Bar *b, int i, int j)
{
delete b->arr[i][j];
b->arr[i][j] = 0;
}
};
int main()
{
Bar *b = new Bar();
Que *q = new Que();
q->init(b);
q->print(b, 2, 2);
q->rem(b, 2, 2);
q->print(b, 2, 2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZXhjZXB0aW9uPgoKY2xhc3MgRm9vIAp7CiAgICBpbnQgaV87CiAgICBpbnQgal87CnB1YmxpYzoKICAgIEZvbyhpbnQgaSwgaW50IGopIDogaV8oaSksIGpfKGopIHt9CgogICAgdm9pZCBwcmludF9jb29yZHMoKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCB0aGlzIDw8ICIgKCIgPDwgaV8gPDwgJywnIDw8IGpfIDw8ICcpJyA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgpjbGFzcyBCYXIKewpwdWJsaWM6CiAgICBGb28gKmFycls1XVs1XTsgIAp9OwoKY2xhc3MgUXVlCnsKcHVibGljOgogICAgdm9pZCBpbml0KEJhciAqYikKICAgIHsKICAgICAgICBmb3IoaW50IGk9MDsgaTw1OyBpKyspCiAgICAgICAgICAgIGZvcihpbnQgaj0wOyBqPDU7IGorKykKICAgICAgICAgICAgICAgIGItPmFycltpXVtqXSA9IG5ldyBGb28oaSwgaik7CiAgICB9CgogICAgdm9pZCBwcmludChCYXIgKmIsIGludCBpLCBpbnQgaikKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZihiLT5hcnJbaV1bal0pCiAgICAgICAgICAgICAgICBiLT5hcnJbaV1bal0tPnByaW50X2Nvb3JkcygpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgIHRocm93IDA7CiAgICAgICAgfSBjYXRjaCAoaW50IGUpIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICZiLT5hcnJbaV1bal0gPDwgIiBwb2ludHMgdG8gbnVsbCIgPDwgc3RkOjplbmRsOwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkIHJlbShCYXIgKmIsIGludCBpLCBpbnQgaikKICAgIHsKICAgICAgICBkZWxldGUgYi0+YXJyW2ldW2pdOwogICAgICAgIGItPmFycltpXVtqXSA9IDA7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIEJhciAqYiA9IG5ldyBCYXIoKTsKICAgIFF1ZSAqcSA9IG5ldyBRdWUoKTsKCiAgICBxLT5pbml0KGIpOwogICAgcS0+cHJpbnQoYiwgMiwgMik7CiAgICBxLT5yZW0oYiwgMiwgMik7CiAgICBxLT5wcmludChiLCAyLCAyKTsKCiAgICByZXR1cm4gMDsKfQ==