Main Content

MISRA C:2012 Rule 21.3

The memory allocation and deallocation functions of <stdlib.h> shall not be used

Description

Rule Definition

The memory allocation and deallocation functions of <stdlib.h> shall not be used.

Rationale

Using memory allocation and deallocation routines can cause undefined behavior. For instance:

  • You free memory that you had not allocated dynamically.

  • You use a pointer that points to a freed memory location.

Polyspace Implementation

The checker flags uses of the calloc, malloc, realloc, aligned_alloc and free functions.

If you define macros with the same names as these dynamic heap memory allocation functions, and you expand the macros in the code, this rule is violated. It is assumed that rule 21.2 is not violated.

Additional Message in Report

  • The macro <name> shall not be used.

  • Identifier XX should not be used.

Troubleshooting

If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

#include <stdlib.h>

static int foo(void);

typedef struct struct_1 {
    int a;
    char c;
} S_1;

static int foo(void) {

    S_1 * ad_1;
    int  * ad_2;
    int  * ad_3;

    ad_1 = (S_1*)calloc(100U, sizeof(S_1));        /* Non-compliant */
    ad_2 = malloc(100U * sizeof(int));             /* Non-compliant */
    ad_3 = realloc(ad_3, 60U * sizeof(long));      /* Non-compliant */

    free(ad_1);                                    /* Non-compliant */
    free(ad_2);                                    /* Non-compliant */
    free(ad_3);                                    /* Non-compliant */

    return 1;
}

In this example, the rule is violated when the functions malloc, calloc, realloc and free are used.

Check Information

Group: Standard Libraries
Category: Required
AGC Category: Required

Version History

Introduced in R2014b