Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

MEM31-EX1: Allocated memory does not need to be freed if it is assigned to a pointer with static storage duration whose lifetime is the entire execution of a program. The following code example illustrates a pointer that stores the return value from malloc() in a static variable:

Code Block
bgColor#ccccff
langc
#include <stdlib.h>
 
enum { BUFFER_SIZE = 32 };

int f(void) {
  static char *text_buffer = NULL;
  if (text_buffer == NULL) {
    text_buffer = (char *)malloc(BUFFER_SIZE); 
    if (text_buffer == NULL) {
      return -1;
    }
  }
  return 0;
}

...

Tool

Version

Checker

Description

CodeSonar
Include Page
CodeSonar_V
CodeSonar_V

ALLOC.LEAK

Leak

Compass/ROSE   

Coverity

Include Page
Coverity_V
Coverity_V

RESOURCE_LEAK

Finds resource leaks from variables that go out of scope while owning a resource

Cppcheck 
Include Page
Cppcheck_V
Cppcheck_V
 leakReturnValNotUsedReturn value of memory allocation function is not used.

Fortify SCA

5.0

  

Klocwork

Include Page
Klocwork_V
Klocwork_V

MLK
UFM.FFM

 

LDRA tool suite

Include Page
LDRA_V
LDRA_V

484 S

Fully implemented

Splint

Include Page
Splint_V
Splint_V
  

...

Related Guidelines

CERT C++ Secure Coding StandardVOID MEM31-CPP. Free dynamically allocated memory exactly once
ISO/IEC TR 24772:2013Memory Leak [XYL]
ISO/IEC TS 17961Failing to close files or free dynamic memory when they are no longer needed [fileclose]
MITRE CWE

CWE-401, Improper Release of Memory Before Removing Last Reference ("Memory Leak")

...

[ISO/IEC 9899:2011]Subclause 7.22.3, "Memory Management Functions"

 

...