We can lower the resize_catalog() calls to 1 by always leaving space for the final NULL value in global_catalog. That is, we can do something like this:
a. allocate 1 extra when doing realloc() as current_catalog_size*2 + 1. The extra space is for the NULL.
b. and we allocate more memory when (iteration == (current_catalog_size - 1)). That is we reallocate when there is 1 remaining slot.

Also, will the following be better for code readability (also removes the repeated function calls) by doing this in get_masters()? 
if (i == (current_catalog_size-1)) 
     resize_catalog(i);