Next: , Previous: alloca-opt, Up: Particular Modules


13.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.

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: int REALLOC_N (ptr, count)

Reallocate the memory pointed to by ptr to be big enough to hold at least count elements, each sizeof(*ptr) bytes long, and store the address of allocated memory in ptr. If reallocation fails, the ptr variable is not modified.

Returns −1 on failure, 0 on success.

— Macro: void FREE (ptr)

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