调用函数后 C 数组损坏

C array corrupted after calling a function

我有一个简单的 C 程序,它应该用随机值填充一个数组(这是学校作业的开始)。我正在使用 rand(),用 srand(time()) 播种它。因为在特定时间段内重复 运行 时,这往往会产生一些可预测的结果,所以我做了另一个非常简单的函数来给我一个更随机的种子值:

time_t getRandomSeed(int numberOfIterations)
{
    int i;
    time_t result=time();

    for (i = 0; i < numberOfIterations; i++)
    {
        result = randomizeSeed(result);
    }

    return result;
}

time_t randomizeSeed(time_t seed)
{
    time_t result, fullTime, Modifier1, Modifier2;

    srand((unsigned int)seed);
    fullTime = time();
    Modifier1 = time() >> (rand() % 10);
    Modifier2 = (unsigned short)time();
    Modifier2 <<= (rand() % 9 + 9);

    result = fullTime ^ Modifier1 ^ Modifier2;

    return result;
}

主要是,我在声明 2 个 int 数组后在 srand() 中调用它。当我 return 到 main 时,这些数组是垃圾,我不明白为什么。

int main(void)
{   
    int randomNumbers[ARRAY_LENGTH];
    int sortedNumbers[ARRAY_LENGTH];

    srand((unsigned int)getRandomSeed(2));

    fillArray(randomNumbers, sizeof(randomNumbers) / sizeof(randomNumbers[0]));

    return 0;
}

我在第 4 行设置了一个断点,并且我有一个完全正常的单元化数组(最近 运行 中的 0x00e1ea70)。然后我在第 8 行设置了另一个断点,这样我就可以在它被传递到 fillArray 之前看到数组。此时,数组的地址不知何故是 0xfffff04c,所有元素都显示 "unable to read memory",鉴于地址是垃圾,我想这是有道理的。

任何人都可以告诉我阵列发生了什么事吗?

*注意,这是为了学校作业,所以我真的不在乎 RNG 是否安全,我也不能使用任何第 3 方库。

更新: 根据请求,这是 fillArray() 的主体。但是,根据我的问题,问题发生在我们到达 fillArray() 之前,因为我在它被调用之前设置了断点。

void fillArray(int array[], size_t length)
{
    size_t i;

    for (i = 0; i < length; i++)
    {
        array[i] = rand()%1000 + 1;
    }

    return;
}

在您的函数 randomizeSeed() 中,您连续三次调用 time() 且没有参数。

fullTime = time();
Modifier1 = time() >> (rand() % 10);
Modifier2 = (unsigned short)time();

函数原型是

time_t time(time_t *timer);

所以你应该注意你的编译器警告。从这一点开始,你有未定义的行为。