2016-12-03 53 views
-4

我聲明mpz變量並將它們初始化爲void函數。C中的分段錯誤(核心轉儲)(使用GMP庫)

這不起作用。

例如:

mpz_t a; 
init(); 
    ... 
void init(){ 
    mpz_init(a); 
    .... 
} 

沒有錯誤。

init(); 
    ... 
    void init(){ 
     mpz_t a; 
     mpz_init(a); 
    } 

發生錯誤。

+3

您可以嘗試創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)並向我們展示?你是否曾嘗試在調試器中運行以捕捉崩潰的實際情況並查看它在代碼中的位置? –

+2

任何時候「發生錯誤」都必須準確知道錯誤信息_says_。 – Chris

回答

0

從你有的一點點代碼,差異似乎是變量a的範圍。對於只有本地範圍的變量(在您的init()函數中)調用mpz_init(a)有什麼意義? init()返回後,a消失。如果您以後需要它,變量a,以及mpz_init()的一些副作用將不存在。如果您希望mpz_init()的副作用持續超過init()的末尾,它必須在某些結構上生效,該結構在init()的末尾仍然存在。在你的第一個例子中,a是用全局範圍聲明的,所以它對於你的整個程序都是持久的。