MISRAC++2008-7-5-2_c
Synopsis
(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.
Enabled by default
Yes
Severity/Certainty
High/Medium

Full description
Detected a stack address stored in a parameter of pointer or array type. This check is identical to MEM-stack-param, MISRAC++2023-6.8.3_c, MISRAC2004-17.6_d, MISRAC2012-Rule-1.3_s, MISRAC2012-Rule-18.6_d, CERT-DCL30-C_e.
Coding standards
- CERT DCL30-C
Declare objects with appropriate storage durations
- CWE 466
Return of Pointer Value Outside of Expected Range
- 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-1.3
(Required) There shall be no occurrence of undefined or critical unspecified behaviour
- 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++ 2023 6.8.3
(Required) An assignment operator shall not assign the address of an object with automatic storage duration to an object with a greater lifetime
Code examples
The following code example fails the check and will give a warning:
void example(int **ppx) {
int x;
ppx[0] = &x; //local address
}
The following code example passes the check and will not give a warning about this issue:
static int y = 0;
void example3(int **ppx){
*ppx = &y; //OK - static address
}