每当运行时,C heapsort崩溃,Windows报告错误

时间:2016-04-26 18:41:36

标签: c windows sorting crash heapsort

我目前在使用这个heapsort时遇到了一些麻烦,我在编译时没有错误,但是,当我运行该程序时,它会崩溃,因为在Windows中它崩溃了,终端中没有输出,只有来自视窗。这是代码。该文件是一个简单的逐行文件,其中包含数字,其中包含10,000个元素。

#include<stdio.h>
void heapsort(int[],int);
void heapify(int[],int);
void adjust(int[],int);
int main() {
    int n,i,a[10000];
    // printf("\nEnter the limit:");
    FILE *file;
    file = fopen("input.txt", "r");
    int j=0;
    int num;
    while(fscanf(file, "%d", &num) > 0) {
        a[j] = num;
        j++;
    }
    fclose(file);
    // scanf("%d",&n);
    // printf("\nEnter the elements:");
    // for (i=0;i<n;i++)
    //   scanf("%d",&a[i]);
    heapsort(a,n);
    printf("\nThe Sorted Elements Are:\n");
    for (i=0;i<n;i++)
      printf("\t%d",a[i]);
    printf("\n");
    return 0;
}
void heapsort(int a[],int n) {
    int i,t;
    heapify(a,n);
    for (i=n-1;i>0;i--) {
        t = a[0];
        a[0] = a[i];
        a[i] = t;
        adjust(a,i);
    }
}
void heapify(int a[],int n) {
    int k,i,j,item;
    for (k=1;k<n;k++) {
        item = a[k];
        i = k;
        j = (i-1)/2;
        while((i>0)&&(item>a[j])) {
            a[i] = a[j];
            i = j;
            j = (i-1)/2;
        }
        a[i] = item;
    }
}
void adjust(int a[],int n) {
    int i,j,item;
    j = 0;
    item = a[j];
    i = 2*j+1;
    while(i<=n-1) {
        if(i+1 <= n-1)
           if(a[i] <a[i+1])
            i++;
        if(item<a[i]) {
            a[j] = a[i];
            j = i;
            i = 2*j+1;
        } else
           break;
    }
    a[j] = item;
}

2 个答案:

答案 0 :(得分:2)

未初始化本地(自动)变量。您正在将n传递给已定义但未初始化的函数heapsort。我看到注释掉的代码会起作用,因为n是一个输入值。最好将j更改为n以保持一致。

答案 1 :(得分:1)

int n,i,a[10000]; // doesn't initialize n, This is just a declaration

标准ISO / IEC 9899:201x 6.7.9-> 10州

  

如果未初始化具有自动存储持续时间的对象   显然,它的价值是不确定的。

然后你是

heapsort(a,n); // calling heapsort with arbitrary n

您可以考虑更改

fscanf(file, "%d", &num) > 0

fscanf(file, "%d", &num) == 1 

正如你所说:

  

该文件是一个简单的逐行文件,其中包含数字   其中有10,000个元素。