在if语句中声明一个数组并在未定义的行为之外使用它?

时间:2016-11-01 14:48:57

标签: c 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] = '\0';
        seed = new_seed;
    }

    /* Use the seed variable */
}

我之所以这样说的原因是我想在这个函数中使用malloc(),因为它会使函数复杂化很多。

该功能按预期工作(gcc 4.8.4)。但是,在if语句中声明new_seed然后将其分配给seed会导致未定义的行为吗?

1 个答案:

答案 0 :(得分:3)

一旦new_seed超出范围,您就不再拥有为其分配的任何内存。

因此取消引用新分配的seed值的行为是未定义