Pete Pete - 1 month ago 8
C Question

Is declaring an array inside an if statement and using it outside undefined behavior?

Consider this snippet:

void init_seed(char *key)
{
char *seed = key;

size_t seed_len = strlen(seed);

// Make sure the seed is at least 12 bytes long
if (seed_len < 12) {
char new_seed[13];
strcpy(new_seed, seed);
memcpy(new_seed + seed_len, seed, 12 - seed_len);

seed = new_seed;
}

/* Use the seed variable */
}


The reason I declared it this way is that I do not want to use
malloc()
in this function, because it will complicate the function quite a lot.

The function works as intended (gcc 4.8.4). However, does declaring
new_seed
inside the if statement and then assigning it to
seed
cause undefined behavior?

Answer

Yes.

Once new_seed is out of scope, you no longer own any memory that was allocated for it.

So the behaviour on dereferencing the newly assigned value of seed is undefined.