gpt4 book ai didi

c - 在 C 的本地方法中访问全局数组时 gcc 出现段错误

转载 作者:行者123 更新时间:2023-11-30 21:39:58 27 4
gpt4 key购买 nike

我在下面的代码中遇到了 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中的本地方法中访问全局数组吗

最佳答案

看看你的代码...2D 数组的内部维度是 6 个项目宽。然而,无论 N 是什么,您都将 icount 的值增加 N 倍。我敢打赌它是一个大于 6 的数字,所以你访问 arr 就出界了。

这会调用未定义的行为。它在 Visual Studio 上没有崩溃的原因只是不幸:“它似乎有效”是未定义行为的一种形式。

关于c - 在 C 的本地方法中访问全局数组时 gcc 出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26052970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com