2010-08-16 5 views
0

Mon code d'origine (suivant) donne un défaut de SEG à l'attribution de tableau de chaînes à environ num_atoms = 150 000:affectation de tableau de chaîne plutôt petite provoque une erreur de segmentation

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

Pensant que ce fut une première instance de me frapper un débordement de pile question, et pensant que vous pouvez attribuer au tas à l'aide d'une allocation dynamique, j'ai essayé:

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

Ce code a un défaut de seg à environ num_atoms = 350.000. Je ne suis pas sûr de la solution de contournement pour ce problème. Est-ce juste un cas où j'ai besoin d'augmenter la limite pile/tas? Si oui, puis-je le faire en tant qu'option gcc?

Répondre

0

Vous stockez toujours superlat sur la pile dans votre deuxième exemple. Vous pouvez également le déplacer vers le tas.

Les chances sont c'est ce qui cause le problème, puisque dans le 1er exemple, vous Soring num_atoms pointeurs x2 sur la pile (un pointeur par string, un pointeur par double -array) et dans le second vous stockez num_atoms x1 pointeurs sur la pile (un seul par double -array), donc le nombre d'atomes avant segfault doublé.

+0

C'était tout. Doux! Merci d'avoir rattrapé ma faute. – Paul

Questions connexes