我正在尝试编写一个添加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 ;
}
那我该怎么办?
感谢您对此错误提供任何帮助。
答案 0 :(得分:0)
看起来你用这么大的矩阵耗尽了堆栈内存。我建议使用静态分配,即将a
,b
和c
声明为全局:
#define M 1000
#define N 1000
static int a[M][N];
static int b[M][N];
static int c[M][N];
int main() {
/* ... */
}
请注意,如果您执行此操作,M
和N
不能是变量。
或者,您可以尝试动态分配。
答案 1 :(得分:0)
如下所示全局声明这些矩阵,您的问题将得到解决。 这通常是因为全局变量从堆中获得内存,而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 ;
}
希望这会对你有所帮助。