C 中的分段错误(核心转储)(使用 GMP 库)

Segmentation fault (core dumped) in C (with GMP lib)

我声明 mpz 变量并在 void 函数中初始化它们。

没用。

例如:

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

没有错误。

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

发生错误。

从您的少量代码来看,差异似乎是变量的范围 a。在仅具有局部范围的变量上调用 mpz_init(a) 有什么意义(在您的 init() 函数中)? init()returns后,a消失。如果您以后需要它用于其他任何事情,变量 a 以及可能来自 mpz_init() 的一些副作用将不存在。如果您希望 mpz_init() 的副作用持续到 init() 结束后,它必须对某些结构产生影响,该结构也持续到 init() 结束后。在您的第一个示例中,a 是在全局范围内声明的,因此它会在整个程序中持续存在。