TGViewer
Бестиарий программирования Бестиарий программирования @programming_tales · 1.14K subscribers
Post #214 345
Продолжаю бродить по просторам проекта TDengine. Интересный пример косвенного обнаружения ошибки с помощью предупреждения PVS-Studio: V781 The value of the 'size' variable is checked after it was used. Perhaps there is a mistake in program logic. Check lines: 362, 363. osMemory.c 362

Анализатор говорит, что подозрительно проверять значение size после его использования (передачу в функцию realloc). Однако, по задумке автора кода, это нормально. Смысл проверки в следующем: если выделялось более нуля байт, то проверяем, что память удалось выделить. Если выделяли 0 байт, то возврат NULL из функции это ok.

И вроде анализатор выдал предупреждение мимо. Однако, указав на код с запахом, он заставляет сделать его более внимательный обзор. Становится ясно, что код ещё хуже чем казался на первый взгляд. До C23 он плох, но ещё терпим, т. к. всего лишь behavior is implementation defined.

А начиная с C23 это уже вообще UB: if new_size is zero, the behavior is undefined.
More from @programming_tales
  1. Oct 7, 2026Напоминаю, что мы подготовили подборку материалов и вебинаров по теме процессов разработки…
  2. Oct 2, 2026Запись вебинара: Go vet не поможет... Как сделать свой анализатор кода для Go?
  3. Oct 2, 2026В целях нетворкинга и просто так приглашаю коннектиться в TenChat — что-то типа LinkedIn.…
  4. Sep 29, 2026Сегодня коллега демонстрирует, как визуально проявляют себя баги в Java коде: Нашёл ошибки…
  5. Sep 29, 2026photo post
  6. Sep 28, 2026На днях выступал с докладом на форуме "Безопасность транспортных средств", организованном…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →