Skip to main content

IAR Embedded Workbench for Arm 9.70.x

MISRAC++2023-6.8.2_b

In this section:
Synopsis

(Mandatory) A function must not return a reference or a pointer to a local variable with automatic storage duration

Enabled by default

Yes

Severity/Certainty

High/High

highhigh.png
Full description

A function might return an address on the stack. This check is identical to MEM-stack, MISRAC++2008-7-5-1_b, MISRAC2004-17.6_a, MISRAC2012-Rule-18.6_a, CERT-DCL30-C_a.

Coding standards
CERT DCL30-C

Declare objects with appropriate storage durations

CWE 562

Return of Stack Variable Address

MISRA C:2004 17.6

(Required) The address of an object with automatic storage shall not be assigned to another object that may persist after the first object has ceased to exist.

MISRA C:2012 Rule-18.6

(Required) The address of an object with automatic storage shall not be copied to another object that persists after the first object has ceased to exist

MISRA C++ 2008 7-5-1

(Required) A function shall not return a reference or a pointer to an automatic variable (including parameters), defined within the function.

Code examples

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

int *example(void) {
  int a[20];
  return a;  //a is a local array
}

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

#include <stdlib.h>

int* example(void) {
  int *p,i;
  p = (int *)malloc(sizeof(int));
  return p;  //OK - p is dynamically allocated

}