void free_var_array(char *var_array, size_t depth, int *lower_bounds, int *upper_bounds) { size_t i; struct variable **array = NULL; if (depth == 0) { free((struct variable *)var_array); } else { array = (struct variable **)var_array; for (i = 0; i <= (size_t)(*upper_bounds) - (*lower_bounds); ++i) { free_var_array((char *)array[i], depth - 1, lower_bounds + 1, upper_bounds + 1); } } }