sergik_vrn 0 26 января, 2007 Опубликовано 26 января, 2007 (изменено) · Жалоба вчера обнаружился не очень приятный глюк в компиляторе при передаче параметром записи типа { char, char }. проявляется следующим образом - запись целиком передается в одном регистре, потом старший байт выносится в другой регистр, а младший остается там же, причем значение старшего байта не сбрасывается. поэтому при вычислениях (в частности, я попал на взятие индекса массива) используется значение всего слова, а не младшего байта. вот исходник #include "stdio.h" class CNumber { public: CNumber(char h, char l): low_(l), hi_(h) {} char low() const { return low_; } char hi() const { return hi_; } private: char low_; char hi_; }; class usability { public: usability(): use_(0) { } void init(int num) { use_ = num; } int out() const { return use_; } private: int use_; }; usability use_test[1000]; int test(CNumber param) { return use_test[param.low()].out(); } int main() { for (int i =0; i < 1000; ++i) use_test[i].init(i); CNumber num(1,1); int value = test(num); printf("%d", value); } в результате имеем значение value 257, а не 1, как ожидали на всякий случай прикрепляю весь проект (4кб) Изменено 26 января, 2007 пользователем sergik_vrn Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться