0
我在C中有一個簡單的測試程序來在堆上打亂一個數組值。旁註:我知道這裏的隨機邏輯有一個缺陷,不允許「移位」值超過RAND_MAX
,但這不是本文的要點。這個C程序爲什麼會崩潰?
問題是,當我運行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;
}
D'oh,這應該是顯而易見的。謝謝! – The111