GMP代码中的内存分配错误

时间:2017-10-08 14:18:02

标签: c gmp

这个是为数学极客;)

我正在编写一个小型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 ***

我做错了什么? 感谢

1 个答案:

答案 0 :(得分:1)

您尚未初始化变量c。使用此:

mpz_init(c);

即使您不想设置初始值,仍然需要初始化变量以设置值,否则程序将抛出错误。

此外,在调试GNU MP(以及其他任何其他内容)时,您可以做的一件有用的事情是逐个注释掉行以找到问题。今天早上我遇到了这个问题,这就是我解决它的方法。