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(以及其他任何东西)时,您可以做的一件有用的事情是逐行检查并注释掉问题以定位问题。今天早上我遇到了这个问题,我就是这样解决的。
这是给数学极客的 ;)
我正在编写一个小的 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(以及其他任何东西)时,您可以做的一件有用的事情是逐行检查并注释掉问题以定位问题。今天早上我遇到了这个问题,我就是这样解决的。