globus <375...@gmail.com> writes: > > size_t n /*= 0*/; > /* тут пропущены проверки переданных в ф-ю параметров */ > fscanf(f, "%u", &n); > printf("n==%u\n", n); /* для отладки */ > if ((n > K_MAX_ITEMS) || (n == 0)) > { > printf("ERROR: n==%u\n", n); /* тжс */ > *error = K_BAD_SIZE; > goto quit; > } > > if ((stab = malloc(n * sizeof(Stab))) == NULL) > > Код проверки if ((n > K_MAX_ITEMS) || (n == 0)) работает некорректно! Т.е. > fscanf читает из файла, напр., 3, printf его выводит, а if возвращает true, > хотя должен false (K_MAX_ITEMS==1024)! Если убрать этот if, то malloc не может > выделить память (для n==3 всего лишь 432 байта). > > А если инициализировать n в 0 (в декларации, или перед fscanf), то всё > работает > правильно.
> Виноват ли gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2, или что-то другое? Код делает ровно то, что в нём написано: записывает в половину переменной значение, прочитанное из файла. А мусор во второй половине переменной его трогать никто не просил. И о том, что написать там хотели что-то другое, компилятор может только догадываться. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/871vfnjg5u....@sghpc.golosunov.pp.ru