Memory deallocation exception when using free()
It is possible that when you added the new data type to your arrays of allocated data that its increased size is exposing an off-by-one error in your code. If by chance you are accessing an array by one too many elements there is a good chance that you are corrupting the header(s) that the heap manager puts in between MALLOCed blocks. When FREE comes along and depends in this header information to be correct all nature of things can go wrong when it is corrupted. 

When you had the smaller item size in your arrays you may still have had the off by one error but the MALLOC headers may not have been getting corrupted in an immediately harmful way. 

There are also compiler specific ways that the heap manager routines work. It is possible that in some cases the manager may allocate space in certain minimum number of byte sized blocks. It is just possible that in your simpler case that appeared to work that there was unused block space in the MALLOC area that was swallowing up your smaller sized off by one error without harm. When you come with a greater element size maybe the heap manager is not being so kind to you.