C 无错误崩溃,排序算法
该程序的目的是在一个数组中创建一个包含1000个数字的随机列表,对该数组进行排序,然后在(x,x+50)中找到最大的一组数字。该程序成功地在数组中生成和排序数字,但在(i,j)集合查找算法启动时崩溃。该程序在编译时不会产生错误,我相信错误很简单,但就我的一生而言,我找不到问题所在。提前感谢你们这些了不起的人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;
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行?)。