Gcc编译器在第17行给出错误
#include<stdio.h>
void main()
{
int a[8]={4,9,15,20};
int b[4]={3,5,10,13};
int i,j,n=3;
for(i=0;i<=n;i++)
{
if(b[i]<a[i])
{
for(j=n;j>=i;j--)
{
a[j+1]=a[j];
}
a[i]=b[i];
n=n+1;
}
else
{
for(j=n;j>=i;j--)
{
a[j+1]=a[j];
}
a[i+1]=b[i];
n++;
}
}
for(i=0;i<8;i++)
printf(" %d", a[i]);
}
答案 0 :(得分:0)
您是代码给出分段错误,因为您在数组索引大小后访问内存。
要调试它,我只需在代码中添加两个喜欢打印n, i , j
:
if(b[i]<a[i])
{
for(j=n;j>=i;j--)
{
a[j+1]=a[j];
}
a[i]=b[i];
n = n+1; "<---- 1 Correction need here"
printf("In IF %d %d %d\n", i, j, n);
}
else
{
for(j=n;j>=i;j--)
{
a[j+1]=a[j];
}
a[i+1]=b[i];
n++; "<----2 Correction need here"
printf("In Else %d %d %d\n", i, j, n);
}
其输出是:
$ ./a.out
In IF 0 -1 4
In Else 1 0 5
In Else 2 1 6
In Else 3 2 7
In Else 4 3 8
In IF 5 4 9
In IF 6 5 10 <-- i, j, n "buffer overflow"
In IF 7 6 11 <-- i, j, n
In IF 8 7 12 <-- i, j, n
In IF 20 11 13 <-- i, j, n
3 4 5 10 13 5 5 10
建议不要在你的循环中改变n
改变你对此