This diagnostic rule is based on the MISRA (Motor Industry Software Reliability Association) software development standard.
This rule applies only to C. The analyzer detected a potential memory or resource leak. The memory or resource had been allocated with standard library functions, such as: 'malloc', 'calloc', 'realloc', or 'fopen'.
For example:
void foo()
{
int *a = (int*)malloc(40 * sizeof(int));
int *b = (int*)malloc(80 * sizeof(int));
....
free(a);
}
The code above dynamically allocates two buffers, but when the function exits, only one of them is released. This creates a memory leak.
You can fix the code fragment in the following way:
void foo()
{
int *a = (int*)malloc(40 * sizeof(int));
int *b = (int*)malloc(80 * sizeof(int));
....
free(a);
free(b);
}
Let's take a look at a different example:
void bar(bool b)
{
FILE *f = fopen("tmp", "r");
if (b)
{
return;
}
....
fclose(f);
}
The function above opens and reads a file - and does not close it on one of the exit paths. This results in a file descriptor leak.
Below is the correct code:
void bar(bool b)
{
FILE *f = fopen("tmp", "r");
if (b)
{
fclose(f);
return;
}
....
fclose(f);
}
This diagnostic is classified as:
|