== Why is this an issue?

Dynamic memory allocation & deallocation (e.g. ``++malloc++`` / ``++free++``) is somewhat expensive. This is particularly true when it happens in a loop. It is good practice to allocate and deallocate memory only when it is needed.


This rule raises an issue when one, or more, execution path results in unused allocated memory.


=== Noncompliant code example

[source,cpp]
----
int foo(int val) {
  int ret;
  char *buf = malloc(100);
  if (!isPresent(val)) {
    snprintf(buf, 100, "msg %d", val);
    addToList(buf);
    ret = 1;
  } else { // Noncompliant: buf unused in this branch
    ret = 2;
  }
  free(buf);
  return ret;
}
----


=== Compliant solution

[source,cpp]
----
int foo(int val) {
  if (!isPresent(val)) {
    char *buf = malloc(100);
    snprintf(buf, 100, "msg %d", val);
    addToList(buf);
    free(buf);
    return 1;
  }
  return 2;
}
----


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Move this allocation & deallocation into the proper branch(es).


=== Highlighting

Primary: Allocation

Secondary: Deallocation


endif::env-github,rspecator-view[]
