пятница, мая 28, 2010

Неинициализированный указатель и вызов функции

С неинициализированными указателями на экземпляр класса связан один неприятный момент. Допустим, у нас есть класс CBase, в котором есть функция, которая не обращается к переменным класса. То есть указатель this не использует.

class CBase
{
int i;
public:
void f() { std::cout<<"CBase::f"<<std::endl;}
};


И если где-то дальше вы написали код вроде такого:

CBase* p = NULL;
p->f();


То по стандарту это undefined behavior. Однако очень часто функция отрабатывает нормально. Visual Studio 2008, например, генерит вполне себе работающий код. А чего, вызов этой функции был разрешен на этапе компиляции, указатель this не нужен. И довольно долго может создаваться ощущение, что все нормально работает. Можно даже привести более страшно выглядящий пример
((CBase*)0)->f();


Но на самом деле далеко не все нормально. Как только появляется обращение к this, то программа начинает "падать". Примеры:
class CBase
{
int i;
public:
virtual void f() { std::cout<<"CBase::f"<<std::endl;}
};

class CBase
{
int i;
public:
void f() { std::cout<<"CBase::f"<<std::endl; i=0;}
};


Все это приводит к очень интересным трудно отлавливаемым багам.

Ссылка по теме:
comp.lang.c++.moderated - Functions that don't use this, called with uninitialized pointers

вторник, мая 11, 2010

Вебинар с Гербом Саттером

Герб Саттер у себя на блоге рекламирует вебинар с собой: May 12 Webinar on Multicore Parallelism. Я зарегистрировалась, постараюсь быть.
Точная дата - May 12, 2010 at 8 a.m. PT/11 a.m. ET. Это семь вечера по Москве.

P.S. Ролик выложили. Как дать туда прямую ссылку я так и не поняла.

четверг, мая 06, 2010

Paris Game AI conference 2010

В конце июня в Париже пройдет конференция по искусственному интеллекту в играх. Я там буду, если какая-нибудь Катла не решит извергнуться именно в эти дни.

По сравнению с другими геймдевелоперскими сборищами это очень маленькая конференция. Зал, в котором читают доклады, всего один. И недорогая, опять же, по сравнению с остальными геймдевелоперскими мероприятиями. Она дешевле КРИ, например.

Коференция эта довольно популярна, поэтому уже в конце апреля все билеты были распроданы. После чего ее организатор, Алекс Шампандар, выкупил аудиторию вдвое больше первой. И теперь у него новая проблема - её надо заполнить. Он просил пропиарить это мероприятие, что я и делаю.

Итак, Париж 23-24 июня, схема проезда есть на официальном сайте и, cлава Гуглу, мы можем посмотреть где именно это будет.


Язык конференции - английский. Здесь список докладов: Program Highlights

Если вы решите туда поехать, то имейте в виду, что, поскольку вы летите из-за пределов Европы, то вам положена скидка 50 процентов. Там все не очень очевидно в разделе регистрации написано.

После конференции я напишу отчет, а в процессе буду твитить, если там будет WiFi. Хэштэг #AIGD10.

воскресенье, мая 02, 2010

Книга Debugging

Полное название этой книги Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems. Поэтому обычно не нее ссылаются по более короткому названию - Debugging. Автор - David J. Agans.
Редкая книга в своем роде. Потому что книг по отладке мало, очень мало.
Написана весело, с юмором, простым языком. На Amazon'е высокий рейтинг и прекрасные отзывы, что неудивительно. В книге приведено очень много реальных примеров отладки. Примеры в основном по отладке харда, немного по софту и примеры из жизни, из серии "что-то водопровод у нас странно глючит". Описанные в этой книге принципы универсальные, они везде работают. Поэтому будет полезна не только программистам, но и всем занятым в разработке софта.

Правда, я для себя не нашла ничего нового в этой книге. Все это я где-то уже видела или читала, до чего-то сама дошла. Но почитать все равно было полезно, что-то вспомнила, ну и примеры изучила, примеры там классные.