0

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

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

我不知道这个问题的原因。跟记忆有关系吗?如果它在初始迭代中运行良好,那么如果不是内存,为什么现在会出现问题?

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

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

有人知道问题可能是什么吗?

4

1 回答 1

0

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

请参阅MPIR手册的第 3.7 节:

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

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

于 2013-03-22T16:49:10.607 回答