Вступить в клуб →
лёгкаявопросЯзык C/C++ и работа с памятью

Копирование строки: почему портится соседняя память

Функция копирует строку в новую область памяти:

char *dup_name(const char *src) {
    char *dst = malloc(strlen(src));
    strcpy(dst, src);
    return dst;
}

Программа работает, но санитайзер адресов сообщает о записи за границу выделенного блока, а изредка ломается соседняя структура в куче. Что не так?

  • strlen не учитывает завершающий байт \0, поэтому выделено на байт меньше, чем пишет strcpy
  • malloc не обнуляет выделенную память, из-за этого в строке остаётся мусор от предыдущих аллокаций — нужен calloc
  • К памяти, полученной из malloc, нельзя применять strcpy: с такой памятью разрешено работать только через memcpy
  • Параметр объявлен как const char *, а strcpy требует изменяемый источник, поэтому копирование идёт мимо буфера

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела