2010-08-16 4 views
0

Мой исходный код (ниже) дает сбой сегм при присвоении строки массива около 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]; 

Этот код дает ошибку сегм примерно num_atoms = 350000. Я не уверен, что обходной путь для этой проблемы. Это просто случай, когда мне нужно увеличить предел стека/кучи? Если да, могу ли я сделать это как вариант gcc?

ответ

0

Вы все еще храните superlat в стеке в своем втором примере. Вы могли бы переместить его и в кучу.

Скорее всего, это то, что вызывает проблемы, так как в 1-ом примере, вы Söring num_atoms x2 указатели на стек (один указатель на string, один указатель на double -array), а во втором вы храните num_atoms x1 указатели на стек (только один за double -array), поэтому число атомов до segfault удваивалось.

+0

Это было. Милая! Спасибо, что поймал мою ошибку. – Paul

Смежные вопросы