嗨,我尝试使用mpir(一个库)作为我的代码。我更改了代码,并将所有内容都转换为可与mpir一起使用。我的代码由相互依赖的循环和方程式中的一系列循环组成,因此很难发现错误。我在调试后运行了代码,并且在某个循环的前500次迭代中运行良好,然后得到以下消息:

GNU MP:无法分配内存(大小= 24)
按任意键继续 。 。 。

我不知道这个问题的原因。与记忆有关吗?如果它在初始迭代中工作正常,那么如果不是内存,为什么现在应该有问题呢?

我再次创建了代码,这次再次运行了。在给出消息之前,它进行了前2000次迭代:

GNU MP:无法分配内存(大小= 16)
按任意键继续 。 。 。

任何人都知道可能是什么问题吗?

最佳答案

好像您已经知道了。这很可能是内存泄漏。

MPIR参见手册的3.7节:


  mpz_t和mpq_t变量永远不会减少其分配的空间。一般
  这是最好的策略,因为它避免了频繁的重新分配。
  需要在特定情况下将内存返回到堆的应用程序
  可以使用mpz_realloc2或清除不再需要的变量。


Valgrind,一种用于调试内存泄漏的工具,也可能会有所帮助。祝好运。

10-08 11:00