IPs* ips = calloc(MAXIPS, sizeof(*ips));
printf("not this time\n");
// Will never execute
// Unless you meant *(ips+i) == NULL
// Or also ips[i] == NULL
if ( (rc<=destr) || (rc<=0.1) )
// You meant *(ips+i) = NULL; ?
// Or also ips[i] = NULL; ?
But you seem to need to check what that pointer points to, so you need to dereference it. The two ways you can do that are: *(ips + i) or ips[i]. They are equivalent, but the index form is more descriptive in my view.