Memory allocated dynamically not freed
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 or delete.
The function returns the pointer assigned by malloc, calloc, realloc,
or new.
The function stores the pointer in a global variable or in a parameter.
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.
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);
}| Group: Dynamic memory |
| Language: C | C++ |
| Default: Off |
Command-Line Syntax: MEM_LEAK |
| Impact: Medium |
| CWE ID: 401, 404 |