void* not void**
size_t < 0 totally doesn't work