数组维度的变化导致 C++ 崩溃
Change of array dimensions causes crash c++
我的程序中需要一些大数组,我正在使用 size=16*16*12*12 的数组对其进行测试。
然后我将我的程序更改为 运行 size=64*64*12*12 它甚至在进入主程序之前就崩溃了。
问题是这样的数组占用太多内存吗?我试着 运行 我的笔记本电脑上的代码,然后也在一些更强大的台式机上,在这两个情况下它会立即与较大的阵列崩溃,并适用于较小的阵列。数组大小由在代码开头声明的 const int 控制。我使用
std::array<double, (64*64*12*12)>.
提前致谢
更新:
我写的有同样问题的最小程序如下:
#include <iostream>
#include <array>
using namespace std;
//declare variables
using std::array;
const int size_q=2;
const int qpoints=size_q*size_q*size_q;
const int size_k=2;
const int kpoints=size_k*size_k*size_k;
const int branches=12;
const int size_ph=kpoints*branches;
const int size_Theta=size_ph*size_ph;
array<double, size_Theta> f_ph(array<double,size_Theta>);
int main(int argc, char const *argv[])
{
array<double, size_Theta> theta1;
f_ph(theta1);
cout <<"Done";
return 0;
}
array<double, size_Theta> f_ph(array<double,size_Theta> theta1){
for(int i=0;i<size_Theta;i++){
theta1[i]=1.00;
}
return theta1;
**更新:看来确实是内存问题,使用std::vector程序运行很顺利**
您很可能 运行 自动存储 ("stack") 内存不足。
您可以使用矢量:
#include <vector>
std::vector<double> arr(64*64*12*12);
arr[0]; // access first element
或者,如果您不需要向量提供的灵活性,您可以使用 unique_ptr
:
#include <memory>
auto arr = std::make_unique<std::array<double, (64*64*12*12)>>();
(*arr)[0]; // access first element
我的程序中需要一些大数组,我正在使用 size=16*16*12*12 的数组对其进行测试。
然后我将我的程序更改为 运行 size=64*64*12*12 它甚至在进入主程序之前就崩溃了。
问题是这样的数组占用太多内存吗?我试着 运行 我的笔记本电脑上的代码,然后也在一些更强大的台式机上,在这两个情况下它会立即与较大的阵列崩溃,并适用于较小的阵列。数组大小由在代码开头声明的 const int 控制。我使用
std::array<double, (64*64*12*12)>.
提前致谢
更新: 我写的有同样问题的最小程序如下:
#include <iostream>
#include <array>
using namespace std;
//declare variables
using std::array;
const int size_q=2;
const int qpoints=size_q*size_q*size_q;
const int size_k=2;
const int kpoints=size_k*size_k*size_k;
const int branches=12;
const int size_ph=kpoints*branches;
const int size_Theta=size_ph*size_ph;
array<double, size_Theta> f_ph(array<double,size_Theta>);
int main(int argc, char const *argv[])
{
array<double, size_Theta> theta1;
f_ph(theta1);
cout <<"Done";
return 0;
}
array<double, size_Theta> f_ph(array<double,size_Theta> theta1){
for(int i=0;i<size_Theta;i++){
theta1[i]=1.00;
}
return theta1;
**更新:看来确实是内存问题,使用std::vector程序运行很顺利**
您很可能 运行 自动存储 ("stack") 内存不足。
您可以使用矢量:
#include <vector>
std::vector<double> arr(64*64*12*12);
arr[0]; // access first element
或者,如果您不需要向量提供的灵活性,您可以使用 unique_ptr
:
#include <memory>
auto arr = std::make_unique<std::array<double, (64*64*12*12)>>();
(*arr)[0]; // access first element