В каком смысле "буферы переполняются"? У вас буферы - это просто указатели на область памяти, в целом вы можете хоть до потери пульса по ним итерироваться.
И потом,
malloc отдаёт вам неинициализированную память, то есть там просто мусор. Не вижу, чтобы вы как-либо инициализирвали их. Используйте memset, например.
дальше, free это правильно. Надо делать free всегда, когда вы делаете malloc.