[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: GCC генерирует неправильный код?



globus <375gnu@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, или что-то другое?

Код делает ровно то, что в нём написано: записывает в половину
переменной значение, прочитанное из файла. А мусор во второй половине
переменной его трогать никто не просил. И о том, что написать там
хотели что-то другое, компилятор может только догадываться.


Reply to: