C++ C++;如何在没有分割错误的情况下将百万对象存储到阵列中

C++ C++;如何在没有分割错误的情况下将百万对象存储到阵列中,c++,arrays,segmentation-fault,C++,Arrays,Segmentation Fault,如何将一百万个对象存储到阵列中而不出错? 我在C++中玩3D引擎,所有的工作都很好,速度快,但是我不能添加超过50K的对象。对象包含3个矢量和颜色以及一些有用的方法。要帮忙吗 但使用int N=1151000 输出为: Segmentation fault (core dumped) 如何将一百万个对象存储到阵列中而不出错?谢谢。您可以在堆上分配内存(动态分配)。当前您正在获得堆栈溢出 另一种方法是: ulimit-s unlimited在任何Linux系统上都可以增加堆栈大小,但我建

如何将一百万个对象存储到阵列中而不出错? 我在C++中玩3D引擎,所有的工作都很好,速度快,但是我不能添加超过50K的对象。对象包含3个矢量和颜色以及一些有用的方法。要帮忙吗

但使用
int N=1151000

输出为:

Segmentation fault (core dumped)   

如何将一百万个对象存储到阵列中而不出错?谢谢。

您可以在堆上分配内存(动态分配)。当前您正在获得堆栈溢出

另一种方法是:
ulimit-s unlimited
在任何Linux系统上都可以增加堆栈大小,但我建议您使用第一个选项。

您可以使用如下方法:

#include <vector>

class Myc{
    public:
    double x,y,z;
    Myc(double _x=0 ,double _y=0,double _z=0){
        x=_x;y=_y;z=_z;
    }
};

int main(){
    int i; 
    int N=151000;

    std::vector<Myc> pts(N); // stores its data in the free store (heap)

    for (i=0;i<N;i++){
        pts[i] = Myc(1,1,1);
    }
    
    cout << pts[999].x <<endl;
    return 0;
}
#包括
Myc类{
公众:
双x,y,z;
Myc(双x=0,双y=0,双z=0){
x=x;y=y;z=z;
}
};
int main(){
int i;
int N=151000;
std::vector pts(N);//将其数据存储在空闲存储(堆)中

对于(i=0;i使用
std::vector
并插入调用
pts.emplace\u back
方法

int main(){
    int i; 
    int N = 9999999;
    std::vector<Myc> pts;
    for (i = 0; i < N; i++)
    {
        pts.emplace_back(Myc(1, 1, 1));
    }
    
    cout << pts[999].x <<endl;
    return 0;
}
intmain(){
int i;
int N=9999999;
std::向量pts;
对于(i=0;icout堆栈溢出的经典示例。默认堆栈大小受到限制(例如windows上的1MB)。使用
Myc*pts=new Myc[N];
std::vector pts;pts.resize(N)
数组数据存储在堆栈上,堆栈没有足够的空间容纳一百万个元素。您可以使用
std::vector
或者甚至可以使用动态数组。当存在
999999
对象时,最好保留所需的空间,
pts.reserve(N);
#include <vector>

class Myc{
    public:
    double x,y,z;
    Myc(double _x=0 ,double _y=0,double _z=0){
        x=_x;y=_y;z=_z;
    }
};

int main(){
    int i; 
    int N=151000;

    std::vector<Myc> pts(N); // stores its data in the free store (heap)

    for (i=0;i<N;i++){
        pts[i] = Myc(1,1,1);
    }
    
    cout << pts[999].x <<endl;
    return 0;
}
int main(){
    int i; 
    int N = 9999999;
    std::vector<Myc> pts;
    for (i = 0; i < N; i++)
    {
        pts.emplace_back(Myc(1, 1, 1));
    }
    
    cout << pts[999].x <<endl;
    return 0;
}