Main Content

MISRA C++:2023 Rule 21.6.2

Dynamic memory shall be managed automatically

Since R2024b

Description

Rule Definition

Dynamic memory shall be managed automatically

Rationale

Dynamic memory requires management to avoid errors such as memory leaks, double frees, dangling pointers, and nonmatching allocation and deallocation functions. Attempting to manage dynamic memory without facilities such as std::make_unique or std::vector can be error prone. Do not use C-style memory allocation functions because they have limitations such as not being type safe and not using constructors or destructors.

Polyspace Implementation

Polyspace® reports a violation for any of these nonautomatic uses of dynamic memory management:

  • The functions malloc, calloc, realloc, alligned_alloc, and free

  • Nonplacement forms of new or delete

  • Member functions named allocate or deallocate that are enclosed by namespace std

  • Uses of std::unique_ptr::release

Troubleshooting

If you expect a rule violation but Polyspace does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

#include <cstdlib>
#include <iostream>

class MyClass {
public:
    MyClass() { std::cout << "Constructor called\n"; }
    ~MyClass() { std::cout << "Destructor called\n"; }
};

int exampleClass() {
    MyClass* myObject = new MyClass();     // Noncompliant
    delete myObject;                       // Noncompliant
}

int main() {
	exampleClass();
    int* arr = static_cast<int*>(std::malloc(5 * sizeof(int)));    // Noncompliant
    int* arr_c = static_cast<int*>(std::calloc(5, sizeof(int)));   // Noncompliant
    std::free(arr);                                                // Noncompliant
    std::free(arr_c);                                              // Noncompliant
}

In this example:

  • The dynamic allocation and deallocation of memory for the object of the class MyClass using nonplacement forms of the new and delete operators is noncompliant.

  • Use of malloc, calloc, and free are noncompliant.

Check Information

Group: Language support library
Category: Required

Version History

Introduced in R2024b