Problem

I'm wondering why you are dynamically allocating and freeing memory on every pass through loop. You never check that the allocations actually succeed. You simply assume that they did.

Since you need all the allocations to succeed, and since the sizes are constant, static arrays seem a much better fit. Then, the compiler will tell you if there is a problem.

Of course, a size of 80 bytes when you then store 8 bytes in the string seems a waste, as does the overuse of the String class.