17.3 Safe Allocation Macros

The standard C library malloc/realloc/calloc/free APIs are prone to a number of common coding errors. The safe-alloc module provides macros that make it easier to avoid many of them. It still uses the standard C allocation functions behind the scenes.

This module is obsolete, as it does not seem to have caught on in practice and some of its features could not be ported to unusual platforms.

Some of the memory allocation mistakes that are commonly made are

The safe-alloc module addresses these problems in the following way:

Macro: int ALLOC (ptr)

Allocate sizeof *ptr bytes of memory and store the address of allocated memory in ptr. Fill the newly allocated memory with zeros.

Returns −1 on failure, 0 on success.

Macro: int ALLOC_N (ptr, count)

Allocate an array of count elements, each sizeof *ptr bytes long, and store the address of allocated memory in ptr. Fill the newly allocated memory with zeros.

Returns −1 on failure, 0 on success.

Macro: int ALLOC_N_UNINITIALIZED (ptr, count)

Allocate an array of count elements, each sizeof *ptr bytes long, and store the address of allocated memory in ptr. The allocated memory is not initialized.

Returns −1 on failure, 0 on success.

Macro: void FREE (ptr)

Free the memory stored in ptr and set ptr to NULL.