Our caller is already obligated to check for a NULL return, so why not call calloc and return NULL when it fails, instead of exiting ?
<code>
Queue * queue = copy ? calloc(1, sizeof(Queue)) : NULL;
if (queue) { set it up }
return queue;
</code>