【发布时间】:2012-05-24 21:35:51
【问题描述】:
我有一个用 C 语言编写的简单测试程序来打乱堆上的一组值。旁注:我知道这里的随机逻辑有一个缺陷,不允许“位移”值超过RAND_MAX,但这不是本文的重点。
关键是当我运行 N = 10000 的代码时,每隔一段时间它就会崩溃,而且信息很少(下面发布的屏幕截图)。我正在使用 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\n", displaced);
free(values);
return 0;
}
【问题讨论】: