调用函数后 C 数组损坏

标签 c arrays random

我有一个简单的 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;
}

在 main 中,我在声明 2 个 int 数组后在 srand() 内调用它。当我返回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,并且所有元素都显示“无法读取内存”,考虑到该地址是垃圾,我认为这是有道理的。

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

*注意,这是一项学校作业,所以我并不关心 RNG 是否安全,也不能使用任何第三方库。

更新: 根据请求,这是 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();

函数原型(prototype)为

time_t time(time_t *timer);

所以你应该注意你的编译器警告。从此时起,您的行为就变成了未定义。

关于调用函数后 C 数组损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29263539/

相关文章:

c++ - 如何在给定函数之外获取与 C 闭包关联的(向上)值?

c - 使用指向指针数组成员的指针进行静态结构初始化

java - 对字符串数组中的 2 个字符串进行排序 (Java)

arrays - 如何将整个数组附加到 Scala 中的数组?

java - 如何定义和初始化一个生成 2 到 20(含)随机整数的变量?

Python,生成随机的括号字符串

c - 结构体数组?

字符数组下标警告

python - random.randint 非整数? [Python]

c++ - 我可以获得在键盘上按下某个键的时间量吗