The memarray_alloc can be error prone to use as the block returned can
contain data from previous uses. The memarray_calloc call added in this
commit always zeroes the block before returning it to the user.
If memarray data is not initialized to 0 (for instance during a
re-init). The last element of the array is not properly cleared thus
leading to returning an invalid pointer when everything is allocated.