程序中的分段错误(核心已转储)

Segmentation fault (core dumped) in program

我正在尝试编写一个将 2 个矩阵相加的程序。

如果我增加矩阵大小,我会收到以下错误:

Segmentation fault (core dumped)

这是我的代码:

#include <iostream>

using namespace std;
int main()
{
  int thrd ;
  int m = 1000 ;
  int n = 1000 ;
  int a[m][n] ;
  int b[m][n] ;
  int c[m][n] ;
  for(int i=0 ; i<m ; i++)
  for(int j=0 ; j<n ; j++)
        {
         a[i][j] = 0 ;
         b[i][j] = 0 ;
        }

  for(int i =0 ; i<m ; i++)
    {
      for(int j=0 ; j<n ; j++)
        c[i][j] = a[i][j] + b[i][j] ;
    }
  return 0 ;
}

那我该怎么办?

对于此错误的任何帮助,我将不胜感激。

看起来你用这么大的矩阵耗尽了堆栈内存。我建议改为静态分配,即将 abc 声明为全局:

#define M 1000
#define N 1000

static int a[M][N];
static int b[M][N];
static int c[M][N];

int main() {
    /* ... */
}

请注意,如果您这样做,MN 不能成为变量。

或者,您可以尝试动态分配。

如下所示全局声明这些矩阵,您的问题将得到解决。 这通常是因为全局变量从堆中获得内存,而 main 中的变量从堆栈中获得内存。

#include <iostream>
#define max 1000
int a[max][max] ;
int b[max][max] ;
int c[max][max] ;

using namespace std;
int main()
{
  int thrd ;
  int m = 1000 ;
  int n = 1000 ;
  for(int i=0 ; i<m ; i++)
  for(int j=0 ; j<n ; j++)
        {
         a[i][j] = 0 ;
         b[i][j] = 0 ;
        }

  for(int i =0 ; i<m ; i++)
    {
      for(int j=0 ; j<n ; j++)
        c[i][j] = a[i][j] + b[i][j] ;
    }
  return 0 ;
}

希望对您有所帮助。