Comment savoir si la stack du programme ca déborde?

Je simule un problème (modèle 3d Ising) en c mais lorsque la taille du problème s’agrandit, le programme s’arrête et l’erreur ci-dessous apparaît:

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV) 

Dans le programme, j’ai une fonction récursive qui fait tout le travail, je soupçonne que l’erreur est due au débordement de stack (dans la fonction récursive) mais je ne sais pas comment en être sûr.

et si c’est à cause d’un débordement de stack, y a-t-il un moyen de résoudre ce problème sans changer la conception du programme?

J’utilise Clion IDE.

 /* * recursive function to form Wolff Cluster(= WC) */ void grow_Wolff_cluster(lattic* l, Wolff* wolff, site *seed){ /*a neighbor of site seed*/ site* neighbor; /*go through all neighbors of seed*/ for (int i = 0 ; i neighbors[i]; /*add to WC according to the Wolff Algorithm*/ if(neighbor->spin == seed->spin && neighbor->WC == -1 && ((double)rand() / RAND_MAX) Wolff_cluster[wolff->WC_pos] = neighbor; wolff->WC_pos++; // the number of sites that is added to WC neighbor->WC = 1; // for avoiding of multiple addition of site neighbor->X = 0; ///controller_site_added_to_WC(); /*continue growing Wolff cluster(recursion)*/ grow_Wolff_cluster(l, wolff, neighbor); } } } 

Utilisez le débogueur GDB et examinez la stack d’appels.

 gdb main r bt