...
As a result of this undefined behavior, it is likely that p will refer to the string literal "Surprise, surprise" after the call to the innocuous() function.
Compliant Solution (
...
Similar Scope)
In this compliant solution, p is declared with the same scope as str, preventing p from taking on an indeterminate value outside of this_is_OK().
| Code Block | ||
|---|---|---|
| ||
void this_is_OK(void) {
const char str[] = "Everything OK";
const char *p = str;
/* ... */
}
/* p is inaccessible outside the scope of string str */
|
Alternately, both p and str could be declared with static scope.
Compliant Solution (
...
Differing Scope)
If it is necessary for p to be defined with file scope, but str with a more limited scope, it then p can be set to NULL before str is destroyed. This prevents p from taking on an indeterminate value, although any references to p must check for NULL.
...