1. When all buckets are full you're moving crabs to larger bucket array forgetting to add a new crab when done.

2. You're misusing new new[] delete operators:

arr = new bucket();
// ......