【问题标题】:Segmentation fault (core dumped) in C (with GMP lib)C 中的分段错误(核心转储)(使用 GMP 库)
【发布时间】:2016-12-03 18:25:18
【问题描述】:

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

它不工作。

例如:

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

没有错误。

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

发生错误。

【问题讨论】:

  • 您能尝试创建一个Minimal, Complete, and Verifiable Example 并展示给我们看吗?您是否尝试过在调试器中运行以捕捉正在运行的崩溃并查看它在您的代码中发生的位置?
  • 任何时候“发生错误”,准确了解错误消息说什么非常重要。

标签: c linux segmentation-fault gmp


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 2017-02-25
    • 2016-07-12
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多