C - 动态数组中的排序不适用于特定数量的值

C - Sorting in dynamic array doesn't work for specific number of values

我的任务是为从文件中读取的整数值创建一个排序算法。这些值必须在一个数组中排序,因为值的数量是可变的,我使用了一个动态整数数组(实际上是我第一次)。

现在,该算法似乎工作正常,因为它以正确的顺序打印所有值,但只有在有 6 个值需要排序时才会出现。在那种情况下,没有任何输出,似乎连排序过程都不再成功了。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

void swap(int *a, int *b){
..
}

int main(){
    int i,anzahl,sorted=0,bla;
    FILE *fp;
    int* feld;

    fp=fopen("file","r");
    if (fp==NULL) return 0;
    else {
        fscanf(fp,"%i",&anzahl);
        feld=(int*)calloc(anzahl,sizeof(int));
        for (i = 0; i <= anzahl; ++i) {
            fscanf(fp,"%i",&bla);
            *(feld+i)=bla;
        }
        fclose(fp);
        while (sorted==0){
            for (i = 0; i < anzahl-1; ++i) {
                if (feld[i]>feld[i+1]) swap(&feld[i],&feld[i+1]);
            }
            for (i = 0; i < anzahl-1; ++i) {
                if (feld[i]<=feld[i+1]) sorted=1;
                else {sorted=0; break;}
            }
        }
        for (i = 0; i <anzahl; ++i) {
            printf("%i ",feld[i]);
        }
    }
    return 0;
}

请原谅德语变量名和新手风格的代码。

如果现在我的"file"内容如下:

6
1
5
1
99
7
8

该程序将无法运行。如果我更改值的数量,一切都很好,但是只要值的数量是 6,程序就无法运行,无论有什么值。

您越界导致此处出现未定义行为:

for (i = 0; i <= anzahl; ++i)
               ^

这一行应该比较 less than 而不是 equal or less than

同时检查 calloc() return 值总是一个好主意。