Почему буфер переполняется

«Почему буфер переполняется» — вопрос из категории Алгоритмы и структуры данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Буфер переполняется, когда данные записываются за пределы выделенной памяти. Это происходит, например, при копировании строки без проверки длины:

val buffer = ByteArray(10)
val input = "This string is too long".toByteArray()
System.arraycopy(input, 0, buffer, 0, input.size) // Переполнение!

Основные причины:

  1. Отсутствие проверки длины данных перед записью
  2. Использование небезопасных функций (strcpy в C/C++)
  3. Ошибки в арифметике указателей

Последствия:

  • Коррупция памяти
  • Возможное выполнение вредоносного кода
  • Краш приложения

Как предотвратить:

  • Всегда проверяйте размер данных
  • Используйте безопасные аналоги (например, strncpy вместо strcpy)
  • В Kotlin/Java предпочитайте типы с автоматическим управлением памятью (String, List)