楼主代码在codeblocks里的确可以通过编译,经调试发现是在sprintf(len,"%d\n", max[i])出现内存访问错误,因为这时max已经指向0(NULL)了,导致max指向NULL的语句是paixu(&max, cons).在max为数组时,&max相当于&max[0],在函数参数里复制了一个地址值,相当于指针,但由于你已经定义max为指针了,&max相当于传送指针变量地址过去,排序相当于是对一个二级指针排序,你原始数据多读一个空行,所以实际数据是12 65 94 35 16 54 95 0,排序后会把0送入max【0】的地址,就是将max的指向修改为NULL了,所以在执行sprintf会出现访问无效内存的错误提示。将paixu(&max, cons);修改为paixu(max, cons);即可在codeblocks里正常编译执行。
实际上你对fgets、calloc和paixu传二级指针在其他编译器里根本通不过编译。calloc返回是void,要传给int指针必须强制转换(int*)calloc才能通过编译。