我正在使用valgrind在使用GMP(尤其是mpq数据类型)的C程序上检查内存泄漏。我收到了几份几乎完全相同的有关内存泄漏的报告,格式如下:
==16009== 480 bytes in 60 blocks are definitely lost in loss record 43 of 56
==16009== at 0x1000B5596: malloc (in /usr/local/Cellar/valgrind/HEAD-fee5954/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
==16009== by 0x1000C4856: __gmp_default_allocate (in /usr/local/Cellar/gmp/6.1.2_1/lib/libgmp.10.dylib)
==16009== by 0x1048A960F: ???
==16009== by 0x1000DA382: __gmpq_init (in /usr/local/Cellar/gmp/6.1.2_1/lib/libgmp.10.dylib)
问题似乎是由于GMP库中某个地方的进程函数__gmpq_init
引起的。我不知道何时分配此内存,因为未在从中编译可执行文件的.c文件中调用它,也不知道如何修复它。
如果相关,我也使用其他GMP数据类型(mpz,mpfr等),它们不会引起类似的内存泄漏问题。