Доброго времени суток, all. На днях начал писать мини-движок для игры в шашки/шахматы/нарды/... (в-общем, любые игры, использующие поле). Всё бы ничего, дело продвигалось, но возникла проблема, самостоятельно которую решить у меня так и не получилось. Код: // Объявляем свою структуру для игровых объектов со ссылками на предыдущий и следующий typedef struct CGameObject* GameObjectPtr; typedef struct CGameObject { int x; int y; GameObjectPtr prev; GameObjectPtr next; } GameObject; // ---------------------------------- // Сравниваем x и y двух объектов. При совпадении, возвращаем указатель на первый static GameObjectPtr comparexy(GameObjectPtr go, GameObjectPtr goxy) { if((go->x == goxy->x) && (go->y == goxy->y)) { return go; } return NULL; } // Собственно, итератор с callback-функцией, принимающей два параметра - текущий объект и дополнительный. GameObjectPtr iterate(GameObjectPtr begin, GameObjectPtr callback(GameObjectPtr, GameObjectPtr), GameObjectPtr additional) { GameObjectPtr gocur = begin, goret = NULL; while(gocur->next != NULL) { gocur = gocur->next; if((goret = callback(gocur, additional)) != NULL) { return goret; } } return NULL; } // Функция поиска объекта по его x и y GameObjectPtr gofindbyxy(GameObjectPtr begin, int x, int y) { GameObjectPtr gonew = goalloc(NULL); gonew->x = x; gonew->y = y; return iterate(begin, comparexy, gonew); } При вызове gofindbyxy(begin, 1, 1); объекта, который существует он просто не находит. :( Не знаю, где собака порылась, не могу найти ошибку, если надо могу привести код аллокатора и деструктора. --- С Уважением,