Bill,
The freeing & allocating looks right to me - thought of a couple of
things to check, though.
1) make sure that in the get_bd function, patch->next=NULL;
2) ususally when I get Bus Errors, it's because I pass an address of
a pointer instead of a pointer or I've declared the pointer
type wrong at one side or the other of the function call.
-Bill B.