C++ 小字符串数组分配导致分段错误

C++ 小字符串数组分配导致分段错误,c++,heap,segmentation-fault,stack-overflow,C++,Heap,Segmentation Fault,Stack Overflow,我的原始代码(如下)给出了字符串数组赋值的seg错误,大约为num_atoms=150000: int num_atoms=dimension[0]*dimension[1]*dimension[2]*prim_lat.size(); double superlat[num_atoms][3]; string current_occ[num_atoms]; 考虑到这是我遇到堆栈溢出问题的第一个实例,并考虑到可以使用动态分配分配给堆,我尝试: int num_atoms=dimension[0]

我的原始代码(如下)给出了字符串数组赋值的seg错误,大约为num_atoms=150000:

int num_atoms=dimension[0]*dimension[1]*dimension[2]*prim_lat.size();
double superlat[num_atoms][3];
string current_occ[num_atoms];
考虑到这是我遇到堆栈溢出问题的第一个实例,并考虑到可以使用动态分配分配给堆,我尝试:

int num_atoms=dimension[0]*dimension[1]*dimension[2]*prim_lat.size();
double superlat[num_atoms][3];
string *current_occ = new string[num_atoms];

该代码给出了一个seg故障,大约为num_atoms=350000。我不确定这个问题的解决方法。这只是我需要增加堆栈/堆限制的情况吗?如果是这样,我可以作为gcc选项执行此操作吗?

在第二个示例中,您仍然在堆栈上存储
superlat
。你也可以把它移到堆里


很可能这就是问题的原因,因为在第一个示例中,您在堆栈上排序num_atoms x2指针(每个
字符串一个指针,每个
-数组一个指针),而在第二个示例中,您在堆栈上存储num_atoms x1指针(每个
-数组仅一个指针),因此,segfault之前的原子数增加了一倍。

就是这样。好极了!谢谢你抓住我的错误。