【发布时间】:2014-01-04 10:55:46
【问题描述】:
我编写了一个外部 C 函数,由 R .C() 函数调用。为了检查没有发生内存泄漏,我使用来自 Ubuntu 的 valgrind 进行下一次调用。
R --debugger=valgrind --vanilla < Desktop/eraseme.R
而且我没有收到任何错误。但是我确实收到了我有内存泄漏的通知。
==16347== HEAP SUMMARY:
==16347== in use at exit: 30,440,904 bytes in 13,097 blocks
==16347== total heap usage: 29,644 allocs, 16,549 frees, 134,692,871 bytes allocated
==16347==
==16347== LEAK SUMMARY:
==16347== definitely lost: 120 bytes in 2 blocks
==16347== indirectly lost: 480 bytes in 20 blocks
==16347== possibly lost: 0 bytes in 0 blocks
==16347== still reachable: 30,440,304 bytes in 13,075 blocks
==16347== suppressed: 0 bytes in 0 blocks
==16347== Rerun with --leak-check=full to see details of leaked memory
但是我不知道如何找到泄漏的来源。输出显示我应该使用选项--leak-check=full 运行它,但该选项不可用。
我怎样才能找到泄漏的来源?考虑到我正在运行 R 脚本,我必须向 Valgrind 拨打哪个电话?
感谢您的宝贵时间。
编辑:当我说该选项不可用时,我的意思是当我寻找它们时我只有这些选项。
--arch --help --min-vsize --no-restore-history --silent
--args --interactive --no-environ --no-save --slave
--debugger-args --max-nsize --no-init-file --no-site-file --vanilla
--encoding --max-ppsize --no-readline --quiet --verbose
--file --max-vsize --no-restore --restore --version
--gui --min-nsize --no-restore-data --save
编辑:所以即使C() 函数是正确的,R 确实会显示内存泄漏。
【问题讨论】:
-
Valgrind show memory leaks and now what?:你应该解决这个问题。 -
"但该选项不可用" --- 这是什么意思?当您尝试使用它时会发生什么?
-
--debugger-args=--leak-check=full怎么样(如果这是有效的语法,否则添加一些引号)? -
还与没有您的代码的普通 R 会话进行比较——R 不会完全返回分配的内存,我认为原则上当 R 消失时,所有当前正在使用的内存也会消失。跨度>
-
@Kninnung 是对的,
--leak-check是 valgrind 的一个选项,而不是 R,所以你必须给它--debugger-args=--leak-check=full
标签: c r memory-leaks