该程序的目的是在数组中创建1000个数字的随机列表,对该数组进行排序,然后在(x,x + 50)内找到最大的数字集。程序成功生成并对数组中的数字进行排序,但在(i,j)设置查找算法启动时崩溃。该程序在编译时不会产生错误,我确信错误很简单,但对于我的生活,我找不到问题。提前感谢你们这些了不起的人!
int main( ){
int a, b, temp, i, j, x, y, tempTotal, arrayStartMax;
int finalTotal = 0;
int *info[ARRAY_FULL];
for (i=0; i<ARRAY_FULL; i++){
info[i]=(int*)malloc(sizeof(int));
*info[i]=rand()%1000;
}
for (a = 0; a < ARRAY_FULL; ++a){
for (b = a + 1; b < ARRAY_FULL; ++b){
if (*info[a] > *info[b]){
temp = *info[a];
*info[a] = *info[b];
*info[b] = temp;
}
}
}
for (i=0; i<ARRAY_FULL; i++){
printf("%d\n", *info[i]);
}
for (i = 0; i <= ARRAY_HALF; i++){
x = *info[i];
y = x+ARRAY_HALF;
tempTotal = 0;
for (j = i; j < i+ARRAY_HALF; i++){
if (*info[j] >= x || *info[j] <= y) {
tempTotal++;
}
if (tempTotal > finalTotal) {
arrayStartMax = *info[i];
finalTotal = tempTotal;
}
}
}
printf("Interval should start at %d for maximum numbers in a set.", arrayStartMax);
}
出于本程序的目的,我想提一下ARRAY_FULL = 100和ARRAY_HALF = 50。
答案 0 :(得分:1)
你的代码正在抛出段错误,因为你在这个for循环中走出界限。
for (j = i; j < i+ARRAY_HALF; i++){
if (*info[j] >= x || *info[j] <= y) {
tempTotal++;
}
if (tempTotal > finalTotal) {
arrayStartMax = *info[i];
finalTotal = tempTotal;
}
设置j = i然后在比较之前增加i。所以j总是小于i。
在for循环的比较部分限制i,它不会发生段错误。
我不认为比较是在做你想要的,但你应该能够从这里找到回家的路。