簡體   English   中英

如何知道ac程序的堆棧溢出?

[英]how to know a c program's stack overflows?

我在c中模擬了一個問題(3d Ising模型)但是當問題大小變大時程序停止並出現以下錯誤:

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

在程序中我有一個遞歸函數,完成所有工作,我懷疑錯誤是由於堆棧溢出(在遞歸函數中)但我不知道如何確定。

如果是因為堆棧溢出,有沒有辦法解決這個問題而不改變程序設計?

我正在使用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) {


        neighbor = seed->neighbors[i];

        /*add to WC according to the Wolff Algorithm*/
        if(neighbor->spin == seed->spin && neighbor->WC == -1 && ((double)rand() / RAND_MAX) < add_probability)
        {
            wolff->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);
        }
    }
}

使用GDB調試器並查看調用堆棧。

gdb main
r
bt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM