Next: , Previous: , Up: Particular Modules   [Contents][Index]


15.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. If the new array is smaller than the old one, discard excess contents; if larger, the newly added storage 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.


Next: Attributes, Previous: alloca-opt, Up: Particular Modules   [Contents][Index]