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:
|