...
Note that this recommendation does not apply to character arrays initialized with string literals, see STR36-C. Do not specify the dimension of a character array initialized with a string literal for more information.
Non-Compliant Code Example (Incorrect Size)
This non-compliant code example initializes an array of integers using an initialization with too many elements for the array.
...
The size of the array a
is three, although the size of the initialization is four. The last element of the initialization (4
) is ignored. Most compilers will diagnose this error.
Implementation Details
This non-compliant code example generates a warning in gcc
. Microsoft Visual Studio 2008 generates a fatal diagnostic: error C2078: too many initializers
.
Non-Compliant Code Example (Implicit Size)
This non-compliant code example initializes an array of integers using an initialization with too many elements for the array.
...
In this example, the compiler allocates an array of 4 integer elements. However, if the initializer changes, the array dimension may also change, causing unexpected results.
Compliant Solution
This compliant solution explicitly specifies the array dimension.
Code Block | ||
---|---|---|
| ||
int a[4] = {1, 2, 3, 4}; |
Specifying both the array d
This is the preferred approach, because a programmer who changes the initializer size will be warned by the compiler that the array index should also change to accommodate the initializer.
Risk Assessment
Recommendation | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
ARR02-A | medium | unlikely | low | P6 | L2 |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
References
Wiki Markup |
---|
\[[ISO/IEC 9899:1999|AA. C References#ISO/IEC 9899-1999]\] |
...