c++ - 调试可能的 Rcpp 内存泄漏时遇到问题

标签 c++ r rcpp

我正在使用 RcppEigen 编写一个名为 RcppCoDA 的 R 包。

我认为我的项目中的某个地方可能存在内存泄漏,但我不确定。不幸的是,我在运行 Valgrind 时遇到了麻烦,因为它似乎可能不支持 OS X Mojave,并且我遇到了详细的错误 here

我认为重现错误应该很容易:

library(RcppCoDA) # devtools::install_github("jsilve24/RcppCoDA")
library(microbenchmark)

d <- c(100,1000)
X <- matrix(abs(rnorm(prod(d))), d[1], d[2])
X <- clo(X)

# This runs fine
z <- RcppCoDA::alr(X, d=4)

# This for some reason takes forever to run... I think this might be a bug
for (i in 1:1000){
  z <- RcppCoDA::alr(X, d=4)  
}


# This causes RStudio to crash... or takes forever to run...
microbenchmark(
  RcppCoDA::alr(X, d=4), times=10
)

我一遍又一遍地重读代码,不明白怎么会出现内存错误,除非我只是以某种方式滥用 Rcpp...不幸的是,因为我似乎无法让 Valgrind 工作 as outlined here我真的不知道如何调试。我什至不确定我的代码或其他地方是否存在错误。

任何帮助将不胜感激!

最佳答案

感谢一些有用的评论,我能够让 Valgrind 在 docker 镜像中工作。

简单介绍一下我是如何做到的:

  1. 我使用了 docker 镜像:rocker/rstudio
  2. 启动镜像/容器:docker run rocker/rstudio
  3. 运行后:在单独的终端中:docker ps
  4. 获取正在运行的镜像的容器ID,然后运行:docker exec -it <containerID> bash
  5. 安装 valgrind 和 devtools 所需的许多其他东西
  6. 使用 valgrind 调试运行 R:R -d "valgrind --leak-check=full"
  7. 运行导致错误的任何代码并评估 valgrind 输出。

感谢您的帮助!

关于c++ - 调试可能的 Rcpp 内存泄漏时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57360360/

相关文章:

r - 如何修复 R 中的 "no lines available in input"错误?

r - 将列表拆分为不共享 R 中值的列表子集

c++ - 如何制作一个cpp(Rcpp)函数,在输入类型错误时触发 "useful"错误消息?

c++ - 将 Rcpp 函数扩展到任何类型的输入 vector

c++ - 从枚举输出的错误值

c++ - C++ 中的视频扑克

c++ - 在通用容器中查找特定实现

r - 从汇总函数中提取参数系数

c++ - 分块对角矩阵 Armadillo

c++ - 如何从类(class)中获取号码? C++