C 无错误崩溃,排序算法

C 无错误崩溃,排序算法,c,arrays,algorithm,C,Arrays,Algorithm,该程序的目的是在一个数组中创建一个包含1000个数字的随机列表,对该数组进行排序,然后在(x,x+50)中找到最大的一组数字。该程序成功地在数组中生成和排序数字,但在(i,j)集合查找算法启动时崩溃。该程序在编译时不会产生错误,我相信错误很简单,但就我的一生而言,我找不到问题所在。提前感谢你们这些了不起的人 int main( ){ int a, b, temp, i, j, x, y, tempTotal, arrayStartMax; int finalTotal = 0;

该程序的目的是在一个数组中创建一个包含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);

}
int main(){
int a、b、temp、i、j、x、y、TENTOTAL、arrayStartMax;
int finalTotal=0;
int*info[数组已满];
对于(i=0;i*info[b]){
温度=*信息[a];
*信息[a]=*信息[b];
*信息[b]=温度;
}
}
}

for(i=0;i您的代码正在抛出segfault,因为在这个for循环中您将i带出边界

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;j{ 如果(*info[j]>=x | |*info[j]finalTotal){ arrayStartMax=*info[i]; 最终总额=总金额; }
设置j=i,然后在比较之前增加i,所以j总是小于i

在for循环的比较部分限制i,它不会出现故障


我不认为这个比较是你想要的,但是你应该能够从这里找到回家的路。

对于(j=I;j
I++
-->
j++
?我还建议
int*info[ARRAY\u FULL];
int-info[ARRAY\u FULL];
由于数组中的值的范围从0到999,并且由于数组已排序,因此唯一可能的50个最大值的集合是在数组索引49到数组索引99之间。因此,在发布的代码的最后1/2中,所有混乱的计算都可以eliminated@user3629249:9的流(有效)关于编码风格等的注释可能应该转换为一个答案。奇怪的是,您说您正在处理1000个数字,但ARRAY_FULL是100,ARRAY_HALF是50。另外,如果您制作一个MCVE(),则您的注释将是不必要的;值将显示。请在将来创建一个MCVE-它不会比您显示的代码大多少(额外10行?)。