我在 C 中有一个简单的测试程序, 以调和堆积上的一系列值。 主题 : 我知道随机逻辑有一个缺陷, 不允许“ 迁移” 值超过 < code> RAND_ MAX code >, 但这不是此文章的要点 。
要点是当我用 N = 10000 运行代码时, 它会偶尔在很少信息的情况下崩溃( 屏幕截图张贴在下面 ) 。 I m 使用 MINGW 编译器。 我似乎无法复制此崩溃的 N值更低或更高( 比如1000 或 100000 ) 。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const int N = 10000;
int main() {
int i, rand1, rand2, temp, *values;
/* allocate values on heap and initialize */
values = malloc(N * sizeof(int));
for (i = 0; i < N; i++) {
values[i] = i + 1;
}
/* scramble */
srand(time(NULL));
for (i = 0; i < N/10; i++) {
rand1 = (int)(N*((double)rand()/(double)RAND_MAX));
rand2 = (int)(N*((double)rand()/(double)RAND_MAX));
temp = values[rand1];
values[rand1] = values[rand2];
values[rand2] = temp;
}
int displaced = 0;
for (i = 0; i < N; i++) {
if (values[i] != (i+1)) {
displaced++;
}
}
printf("%d numbers out of order
", displaced);
free(values);
return 0;
}
""https://i.sstatic.net/DT0GA.png" alt="此处输入图像描述"/"