我在下面的代码中使用gcc获得了分段错误:
#include <stdio.h>
#define NT 1000
int arr[NT][6];
int N;
int countifinrange(int i,int max)
{
int j=0;
int icount = 0;
for(j=0;j<N;j++)
if((arr[j][i]<=max)&&(max<=arr[j][i+1]))
icount++;
return icount;
}
int main (void)
{
int i, j, value, l, L;
scanf("%d",&N);
scanf("%d",&L);
for(i=0;i<N;i++)
{
for(j=0;j<6;j++)
{
scanf("%d",&arr[i][j]);
}
}
int count;
for(l=0;l<L;l++)
for(i=0;i<6;i=i+2)
{
for(j=0;j<N;j++)
{
value = arr[j][i];
count=countifinrange(j,value);
}
}
return 0;
}
并使用以下代码:
int countifinrange(int i,int max)
{
int j=0;
int icount = 0;
int ij = 0;
for(j=0;j<N;j++)
{
ij = arr[j][i];
//if((arr[j][i]<=max)&&(max<=arr[j][i+1]))
icount++;
}
}
以下代码可以正常使用:
int countifinrange(int i,int max)
{
int j=0;
int icount = 0;
int ij = 0;
for(j=0;j<N;j++)
{
arr[j][i];
//if((arr[j][i]<=max)&&(max<=arr[j][i+1]))
icount++;
}
}
int main (void)
{
int i, j, value;
scanf("%d",&N);
for(i=0;i<N;i++)
{
for(j=0;j<6;j++)
{
scanf("%d",&arr[i][j]);
}
}
int count;
for(i=0;i<6;i=i+2)
{
for(j=0;j<N;j++)
{
value = arr[j][i];
count=countifinrange(j,value);
}
}
return 0;
}
该代码在visual studio中工作正常但是使用gcc-4.6.3给出了分段错误。 我是否可以在c,gcc
中的本地方法中访问全局数组答案 0 :(得分:0)
看看你的代码...... 2D数组的内部维度是6项宽。然而,无论N是多少,你都会将icount的值增加N倍。我敢打赌它是一个大于6的数字,所以你访问arr
越界。
这会调用未定义的行为。它不会在Visual Studio上崩溃的原因只是不幸:“它似乎工作”是一种未定义的行为。