|
была некоторая структура A которая содержала в себе "простые" типы (char,int...) и еще одну структуру. Сравнение двух переменных типа А с помошью memcmp (аргумент размера функции memcmp был sizeof(A)) всегда был на ура. Я считал что кусок кода содержащий данную функцию сравнения отлажен и заподозрить его было не в чем.
Но вот седня убрал одну из переменных (простого типа) из структуры А. Из одной части программы кусок сравнения отрабатывался нормально, но в вот в другом вызове memcmp говорила что не равны, хотя тупая распечатка элементов структуры говорила что они равны.
В итоге все заработало, когда при инициализации членов структуры А
написал memset(A,0,sizeof(A)).
Почему были глюки уже наверна догадались - структура содеоржала "левые" байты для выравнивания переменной А на границу кратную X. А при объявлении структуры и последующей инициализации ее членов "левые" байты содержали всякий мусор.
E-mail: info@telesys.ru