Versions Compared

Key

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

...

Do not delete an array object through a static pointer type that differs from the dynamic pointer type of the object. Deleting an array through a pointer to the incorrect type , results results in undefined behavior.

Noncompliant Code Example

In this noncompliant code example, an array of Derived objects is created and the pointer is stored in a Base *. Despite Base::~Base() being declared virtual, this it still results in undefined behavior. Further, attempting to perform pointer arithmetic on the static type Base *, results in a violation of  violates CTR56-CPP. Do not use pointer arithmetic on polymorphic objects.

...

Attempting to destruct a polymorphic object which that does not have a virtual destructor declared results in undefined behavior. In practice, potential consequences include abnormal program termination and memory leaks.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

EXP51-CPP

Low

Probable

Low

P6

L2

Automated Detection

Tool

Version

Checker

Description

Clang

Include Page
Clang_V
Clang_V
-analyzer-checker=cplusplus 

Related Vulnerabilities

Search for other vulnerabilities resulting from the violation of this rule on the CERT website.

Related Guidelines

...