Lesson 23: calloc, realloc & dynamic arrays
Last lesson we met malloc — which allocates a block but leaves garbage in it. calloc(n, size) goes one step further: it allocates AND zeroes every byte. realloc(p, new_size) resizes an existing block — growing or shrinking it — but beware: it may move the block to a new address, so always store the