【问题标题】:C: How to correct this segfaultC:如何纠正这个段错误
【发布时间】: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 * 10000 int 数组,这就是原因。在堆上使用malloc 创建这个数组,你可能不会再有这个段错误了。
  • 你的循环是错误的。 C 中的数组从零到n-1。所以你的循环应该是for (i=0;i&lt;m;i++)等等。
  • 数组大小的限制确实有帮助!谢谢:)

标签: c arrays segmentation-fault 2d


【解决方案1】:

将您的数组定义为全局变量,在 main 之外。全局变量在数据段,局部变量在栈中,所以这里可能栈溢出了

【讨论】:

    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 2016-06-23
    • 2016-07-26
    • 2021-09-11
    • 2015-02-25
    • 2012-03-16
    • 1970-01-01
    • 2020-05-17
    相关资源
    最近更新 更多