Malloc/free issues

I never used that board but normally, malloc allocators place control structures before the returned pointer (e.g., ptr = block + sizeof(Header)) and you should not assume how much overhead the allocator requires or try to allocate memory.

You should trust that SDRAM.begin() initializes the allocator with the SDRAM start and end addresses and will play nice within that space.