细小的字符串数组赋值导致分段错误

时间:2010-08-16 16:03:45

标签: c++ heap segmentation-fault stack-overflow

我的原始代码(以下)在字符串数组赋值时给出一个seg错误,大约为num_atoms = 150,000:

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];

此代码在num_atoms = 350,000处发出了seg错误。我不确定这个问题的解决方法。这只是我需要增加堆栈/堆限制的情况吗?如果是这样,我可以将其作为gcc选项吗?

1 个答案:

答案 0 :(得分:0)

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

这可能是导致问题的原因,因为在第一个例子中,你在堆栈上读取num_atoms x2指针(每个string一个指针,每个double一个指针 - 数组)和在第二个你在堆栈上存储num_atoms x1指针(每个double只有一个 - 数组),所以在segfault之前原子数加倍。