
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
65 lines
1.1 KiB
Plaintext
65 lines
1.1 KiB
Plaintext
== 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[]
|