«Повреждение кучи» обычно означает, что вы записали в нераспределенную память, повреждая структуры данных, используемые для работы распределителя памяти.
Могут быть и другие проблемы, но первая, которую я вижу, находится в этой строке:
strcpy(buffer, n);
Это будет записывать strlen(n) + 1
байтов в buffer
, но buffer
имеет длину всего strlen(n)
байтов (дополнительный байт является завершающим \0
.). Запись этого байта приводит к неопределенному поведению и вполне может испортить кучу.