【发布时间】:2016-10-15 12:41:21
【问题描述】:
以下代码显示段错误(我不知道为什么?) 输入在二维数组的范围内
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int ar[10000][10000],n,m,i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
ar[i][j]=0;
}
}
for(i=1;i<=n;i++)
{
scanf("%d",&ar[1][i]);
}
for(i=2;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(j!=n)
{
ar[i][j]=ar[i-1][j]^ar[i-1][j+1];
}
else
{
ar[i][j]=ar[i-1][j]^ar[i-1][1];
}
}
}
for(i=1;i<=n;i++)
{
printf("%d ",ar[m-1][i]);
}
}
【问题讨论】:
-
你是在栈上创建一个100M的数组吗?
-
您正在堆栈上创建一个
10000 * 10000int数组,这就是原因。在堆上使用malloc创建这个数组,你可能不会再有这个段错误了。 -
你的循环是错误的。 C 中的数组从零到
n-1。所以你的循环应该是for (i=0;i<m;i++)等等。 -
数组大小的限制确实有帮助!谢谢:)
标签: c arrays segmentation-fault 2d