我是Rcpp的新人,我真的不知道Rcpp。但作为一个个人项目,我试图使用一些C代码运行一些排序算法,用Rcpp将它们转换为R.
但我得到的内存没有映射错误,我真的不明白我做错了什么,所以如果有人可以开导我:)
尝试以下代码时会出现问题
#include <Rcpp.h>
using namespace Rcpp;
void intercala(int p, int q, int r, NumericVector v)
{
int i, j, k;
NumericVector w = NumericVector::create();
i = p;
j = q;
k = 0;
while (i < q && j < r) {
if (v[i] < v[j]) {
w[k] = v[i];
i++;
}
else {
w[k] = v[j];
j++;
}
k++;
}
while (i < q) {
w[k] = v[i];
i++;
k++;
}
while (j < r) {
w[k] = v[j];
j++;
k++;
}
for (i = p; i < r; i++)
v[i] = w[i-p];
}
void mergesort(int p, int r, NumericVector v)
{
int q;
if (p < r - 1) {
q = (p + r) / 2;
mergesort(p, q, v);
mergesort(q, r, v);
intercala(p, q, r, v);
}
}
// [[Rcpp::export]]
NumericVector mergesortC(NumericVector vetor) {
int n = vetor.size();
mergesort(0,n,vetor);
return vetor;
}
此代码位于名为merge.cpp
的文件中 当我尝试在R 上运行时,他们 > library(Rcpp)
> sourceCpp("merge.cpp")
> vetor<-sample(1:10)
> vetor
[1] 1 5 7 4 3 8 9 2 10 6
> mergesortC(vetor)
[1] 1 2 3 4 5 6 7 8 9 10
> vetor
*** caught segfault ***
address 0x8, cause 'memory not mapped'
Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
Selection:
在我看来,我正在做一些我不应该做的事情,但代码似乎在开始工作,然后我在某种程度上弄乱了对象vetor中的内存。我设法使用Rcpp处理其他算法,但是这个算法不起作用,我不明白我做错了什么,所以如果有人可以饶过一时。