Ok; I only mentioned free because you mentioned it "I believe it has something to do with my mm_free()".
Does your trace contain a free call or not ? Are you failing before you hit free ?
This just seems a case of you not requestingmorespace and trying to allocate.
Check why you are not requesting more space? when you ran out of space ?
The searchforfree block should have returned NULL at the time of the segfault, triggering a request for more freespace.