VIPS includes some functions to help you allocate memory for objects, and
to guarantee that objects are eventually freed. The base memory allocation
function is im_malloc(). It has type:
void *im_malloc( IMAGE *im, int size )
It operates exactly as the standard malloc() C library function,
except that the area of memory it allocates is local to image descriptor
im, that is, when descriptor im is closed, the memory will
automatically be freed for you. Memory is freed in reverse order to the
order in which it was allocated; see §3.6.
If im_malloc() is unable to allocate memory, it sets
im_errorstring and returns NULL. If you pass NULL
instead of a valid image descriptor, then im_malloc() allocates
memory globally and you must free it yourself at some stage, using
im_free().
int im_free( void *mem )
Three macros are defined in <vips/util.h> which make memory allocation
even easier. IM_NEW() allocates a new object. You give it a descriptor
and a type, and it returns a pointer to enough space to hold an object of
that type. It has type:
type-name *IM_NEW( IMAGE *im, type-name )
The second macro, IM_ARRAY(), operates in the same way, but allocates
space for an array of objects. Note that unlike the usual calloc()
C library function, it does not initialise the array to zero. It has type:
type-name *IM_ARRAY( IMAGE *im, int nelem, type-name )
Finally, IM_NUMBER() returns the number of elements in an array of
defined size. See the man pages for a series of examples.