崩溃没有错误,排序算法

时间:2017-07-11 03:32:11

标签: c arrays algorithm

该程序的目的是在数组中创建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。

1 个答案:

答案 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,它不会发生段错误。

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