抓住了段错误,内存未映射Rcpp试图实现一个函数的错误

时间:2014-09-02 22:51:36

标签: r mergesort rcpp

我是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处理其他算法,但是这个算法不起作用,我不明白我做错了什么,所以如果有人可以饶过一时。

0 个答案:

没有答案