这个是为数学极客;)
我正在编写一个小型C程序来计算使用GNU MP库的前10个Fibonacci数。这是我的尝试:
#include "gmp.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int main(int argc, char * argv[]){
mpz_t a, b, c;
mpz_init_set_ui(a,1); /* a = 1 */
mpz_init_set_ui(b,1); /* b = 1 */
for (int i=1; i <= 2 ; ++i){
mpz_add(c,a,b); /* c = a + b */
mpz_mul_ui(a,b,1);
mpz_mul_ui(b,c,1);
}
mpz_out_str(stdout,10,c);
printf ("\n");
mpz_clear(a);
mpz_clear(b);
mpz_clear(c);
return 1;
}
我使用gcc(版本7.2.1)使用以下命令成功编译了代码:gcc -o fibonacci fibonacci.c -g -lgmp -lm。 但是,这个代码已被证明不太成功,因为当我运行它时,我收到以下错误:
*** Error in `./fibonacci': realloc(): invalid pointer: 0x00000000004008bd ***
我做错了什么? 感谢
答案 0 :(得分:1)
您尚未初始化变量c。使用此:
mpz_init(c);
即使您不想设置初始值,仍然需要初始化变量以设置值,否则程序将抛出错误。
此外,在调试GNU MP(以及其他任何其他内容)时,您可以做的一件有用的事情是逐个注释掉行以找到问题。今天早上我遇到了这个问题,这就是我解决它的方法。