Skip to main content

IAR Embedded Workbench for Arm 9.70.x

MISRAC2012-Dir-4.13_d

In this section:
Synopsis

(Advisory) Functions which are designed to provide operations on a resource should be called in an appropriate sequence. Memory is being accessed after it has been deallocated. The application might appear to run normally, but the operation is illegal. The most likely result is a crash, but the application might keep running with erroneous or corrupt data.

Enabled by default

No

Severity/Certainty

High/High

highhigh.png
Full description

A pointer is used after it has been freed. This check is identical to MISRAC2012-Rule-1.3_o, SEC-BUFFER-use-after-free-all, CERT-MEM30-C_a, MEM-use-free-all.

Coding standards
CERT MEM30-C

Do not access freed memory

MISRA C:2012 Dir-4.13

(Advisory) Functions which are designed to provide operations on a resource should be called in an appropriate sequence

Code examples

The following code example fails the check and will give a warning:

#include <stdlib.h>

void example(void) {
  int *x;
  x = (int *)malloc(sizeof(int));
  free(x);
  *x++;  //x is dereferenced after it is freed
}

The following code example passes the check and will not give a warning about this issue:

#include <stdlib.h>

void example(void) {
  int *x;
  x = (int *)malloc(sizeof(int));
  free(x);
  x = (int *)malloc(sizeof(int));
  *x++;  //OK - x is reallocated
}