Booking **bookingSelectPaid(Booking **booking) { Booking **ret = malloc(sizeof(Booking*)); printf("Initial address of ret = %p\n", ret); size_t i = 0; int numOfPaid = 0; while (booking[i] != NULL) { if (booking[i]->paid == 1) { printf("Paying customer! sizeof(Booking*) = %d\n", (int)sizeof(Booking*)); ++numOfPaid; size_t newsize = sizeof(Booking*) * (numOfPaid + 1); printf("Newsize = %d\n", (int)newsize); Booking **temp = realloc(NULL, (size_t)newsize); if (temp != NULL) printf("Expansion success! => %p sizeof(new pointer) = %d ret = %p\n", temp, (int)sizeof(temp), ret); ret = realloc(ret, newsize); ret[i] = booking[i]; ret[i+1] = NULL; } ++i; printf("Sizeof(ret) = %d numOfPaid = %d\n", (int)sizeof(ret), numOfPaid); } return ret; }