GMP 代码中的内存分配错误

Memory allocation error in GMP code

这是给数学极客的 ;)

我正在编写一个小的 C 程序来使用 GNU MP 库计算前 10 个斐波那契数。这是我的尝试:

#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 ***

我做错了什么? 谢谢

你还没有初始化变量c。使用这个:

mpz_init(c);

即使您不想设置初始值,您仍然必须初始化变量以为其设置值,否则程序会抛出错误。

此外,在调试 GNU MP(以及其他任何东西)时,您可以做的一件有用的事情是逐行检查并注释掉问题以定位问题。今天早上我遇到了这个问题,我就是这样解决的。