bool nmalloc(size_t n, void ***elts, ...) { va_list ap; *elts = malloc(n * sizeof **elts); if (!*elts) return false; va_start(ap, elts); for (size_t i = 0; i < n; i++) { (*elts)[i] = malloc(va_arg(ap, size_t)); if (!(*elts)[i]) { for (size_t j = 0; j < i; j++) free((*elts)[j]); free(*elts); return false; } } va_end(ap); return true; }