2016-12-03 59 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是用全局范围声明的,所以它对于你的整个程序都是持久的。