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
是在全局范围内声明的,因此它会在整个程序中持续存在。
我声明 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
是在全局范围内声明的,因此它会在整个程序中持续存在。