Memory leak
Memory allocated dynamically not freed
Description
This defect occurs when you
do not free a block of memory allocated through malloc
, calloc
, realloc
,
or new
. If the memory is allocated in a function,
the defect does not occur if:
Within the function, you free the memory using
free
ordelete
.The function returns the pointer assigned by
malloc
,calloc
,realloc
, ornew
.The function stores the pointer in a global variable or in a parameter.
Risk
Dynamic memory allocation functions such as malloc
allocate
memory on the heap. If you do not release the memory after use, you reduce the
amount of memory available for another allocation. On embedded systems with limited
memory, you might end up exhausting available heap memory even during program
execution.
Fix
Determine the scope where the dynamically allocated memory is accessed. Free the memory block at the end of this scope.
To free a block of memory, use the free
function on the pointer
that was used during memory allocation. For
instance:
ptr = (int*)malloc(sizeof(int)); ... free(ptr);
It is a good practice to allocate and free memory in the same module at the same
level of abstraction. For instance, in this example, func
allocates and frees memory at the same level but func2
does
not.
void func() { ptr = (int*)malloc(sizeof(int)); { ... } free(ptr); } void func2() { { ptr = (int*)malloc(sizeof(int)); ... } free(ptr); }
Examples
Result Information
Group: Dynamic memory |
Language: C | C++ |
Default: Off |
Command-Line Syntax: MEM_LEAK |
Impact: Medium |
Version History
Introduced in R2013b
See Also
Topics
- Interpret Bug Finder Results in Polyspace Desktop User Interface
- Interpret Bug Finder Results in Polyspace Access Web Interface (Polyspace Access)
- Address Results in Polyspace User Interface Through Bug Fixes or Justifications
- Address Results in Polyspace Access Through Bug Fixes or Justifications (Polyspace Access)