程序中出现分段错误(堆核)
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 ;
}
那我该怎么办呢?
看起来您用这么大的矩阵耗尽了堆栈内存。我建议静态分配,即声明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
不能是变量。
如下所示全局声明这些矩阵,您的问题将得到解决。这通常是因为全局变量从堆中获得内存,而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 ;
}
相关文章:
- 从类型列表中递归删除重复项会导致编译器堆空间错误 (VS2017)
- 在C++中检测到堆损坏错误
- AddressSanitizer 将 std::vector<T>::p ush_back 标识为释放后堆使用错误的原因
- 只有一个定义/声明时标头声明变量的多堆定义错误
- 导致堆缓冲区错误的动态分配数组的析构函数
- 与强制转换相关的堆损坏错误
- 将 Vector<int> 推送到 Vector<vector 时出现堆溢出错误<int>>
- 为什么 delete[] 会导致堆损坏错误
- 堆摘要错误不匹配
- 尝试在结构中存储数据时出现堆分配错误
- 在Windows上立即检测到堆损坏错误.如何
- 使用删除 [] 和新(放置)运算符的可视C++堆损坏错误
- 调试 MS VC++ 2005 中的堆损坏错误
- 堆损坏错误;无法发布 cv::Mat opencv
- 复制构造函数和重载赋值运算符的堆损坏错误
- 在释放动态内存时,Visual Studio 中的堆损坏错误
- 为什么在使用指针 (C++) 时出现未初始化的堆内存错误
- 调用SysFreeString()时发生堆损坏错误
- 程序中出现分段错误(堆核)
- 删除数组时出现堆损坏错误