|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Ilya Anfimov 2:5020/400 25 Jun 2001 11:25:28 To : Alexander S. Aganichev Subject : Re: bug in gcc -------------------------------------------------------------------------------- On Sat, 23 Jun 2001 00:03:26 +0400, Alexander S. Aganichev <Alexander.S.Aganichev@p19.f604.n5020.z2.fidonet.org> wrote: >Ilya, > >Not so long ago (22 Jun 01) Ilya wrote to me: > >> OM> char *tra-la-la(unsigned long addr) > >> OM> { > >> OM> char sss; > >> ^ * забыл > >> OM> sss=(char *)malloc(sizeof("123")); > >> > >> OM> sprintf(sss,"%03d",addr); > >> > >> OM> return (sss); > >> OM> } > >> > >> OM> И если я делаю так: > >> > >> OM> fprintf(fp, "%s, %s, %d", tra-la-la(10),tra-la-la(20),30); > >> > >> OM> То эта зараза мне выдает строку 010, 010, 30 > >> Вообще-то тут за исключением указанной ошибки похоже всё правильно. > IA> Да? Значение, возвращаемое malloc() не проверяется, unsigned long > IA> он пытается распечатать в 4-х байтовый массив, да еще с помощью > IA> sprintf(). > >Hу тогда ещё не проверяется значение, выдаваемое sprintf, sprintf ничего интересного не возвращает. При обычном использовании. >не освобождается >память, Ой, ..., я лопух. Hе заметил. >неправильный тип в sprintf. Hо для данного конкретного случая эта Следствие первой. >программа будет работать. Ты сколько раз видел реально, чтобы программе, >которая всего 8 байт выделяет malloc'ом не давали памяти? ;) Я видел очень разные примитивные, смешные или не очень ошибки, который становились очевидны после добавления проверок. И warning'ов. Просто до этого обсуждать ошибки в компиляторе/библиотеках бессмысленно. > >Have a nice day wherever you are... >Alexander > --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/612035546c4a.html, оценка из 5, голосов 10
|