是否在 if 语句中声明一个数组并在未定义行为之外使用它?
Is declaring an array inside an if statement and using it outside undefined behavior?
考虑这个片段:
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];
for (int i = 0; i < 12; i++)
new_seed[i] = seed[i % seed_len];
new_seed[12] = '[=10=]';
seed = new_seed;
}
/* Use the seed variable */
}
我这样声明的原因是我不想在这个函数中使用malloc()
,因为它会使函数复杂化很多。
该函数按预期工作 (gcc 4.8.4)。但是,在 if 语句中声明 new_seed
然后将其分配给 seed
会导致未定义的行为吗?
是.
一旦 new_seed
超出范围,您将不再拥有为其分配的任何内存。
因此取消引用 seed
的新分配值的行为是 未定义。
考虑这个片段:
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];
for (int i = 0; i < 12; i++)
new_seed[i] = seed[i % seed_len];
new_seed[12] = '[=10=]';
seed = new_seed;
}
/* Use the seed variable */
}
我这样声明的原因是我不想在这个函数中使用malloc()
,因为它会使函数复杂化很多。
该函数按预期工作 (gcc 4.8.4)。但是,在 if 语句中声明 new_seed
然后将其分配给 seed
会导致未定义的行为吗?
是.
一旦 new_seed
超出范围,您将不再拥有为其分配的任何内存。
因此取消引用 seed
的新分配值的行为是 未定义。