#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int a[N];
void gen_random(int min, int max)
{
int i;
for (i = 0; i < N; ++i) {
a[i] = rand() % min + (max - min + 1);
}
}
int main(void)
{
int m, n, histogram[10] = {0};
srand(time(NULL));
gen_random(10, 20);
for (m = 0; m < N; ++ m) {
++ histogram[a[m]];
}
for (n = 0; n < N; ++ n){
printf("No.%d random number %d appears %d times\n", n, a[n], histogram[a[n]]);
}
return 0;
}
代码生成10-20之间的随机整数,并且统计每个数的出现次数。但是出现了负数和反常统计结果,请问代码那里有问题?Error:
No.1 random number 17 appears 2 times
No.2 random number 18 appears -68681239 times
No.3 random number 14 appears -529580218 times
No.4 random number 11 appears 2 times
No.5 random number 20 appears 1 times
No.6 random number 11 appears 2 times
No.7 random number 16 appears 1 times
No.8 random number 15 appears 32556 times
No.9 random number 19 appears 32765 times
Segmentation fault
OS: LinuxMint 17 rosa 64bit
GCC: 4.8.4
很好奇,你用一个histogram[10]
数组,为何访问的是11-20
的下标。
你访问的是histogram数组后的十个元素,这段空间不属于你,也没初始化,所以你得到的是随机数