为什么我的Rcpp函数返回向量<vector <int =“”>&gt;崩溃?</矢量>

时间:2014-04-19 18:31:06

标签: c++ r rcpp

这是我的测试代码

#include <Rcpp.h>
using namespace Rcpp;

#include "/Users/jjunju/Documents/R/accum/accum.h"

// Below is a simple example of exporting a C++ function to R. You can
// source this function into an R session using the Rcpp::sourceCpp 
// function (or via the Source button on the editor toolbar)

// For more on using Rcpp click the Help button on the editor toolbar

// [[Rcpp::export]]
int timesTwo(int x) {
   return x * 2;
}

// [[Rcpp::export]]
void testExternalHeader(){
  matrix <int> test(3,3);
  test.Print();
}

// [[Rcpp::export]]
vector<vector <int> > testVector(){
  vector<vector <int> > a;
  a.resize(3); //rows
  for(int i=0;i<3;i++){
    a.resize(3); //cols
    for(int j=0;j<3;j++){
    a[i][j]=i*3+j;
    }
  }
  return(a);
}

这是我的Rstudio会话的图片。你可以看到我的函数testVector崩溃了Rstudio。我的外部标题中的任何其他函数都没有问题。就这一个!! :(Rstudio Session that crashed

1 个答案:

答案 0 :(得分:2)

您的向量a包含3个空向量,但您将它们视为不在此处:

a[i][j]=i*3+j; // a[i] has size 0 here

这种越界访问是未定义的行为。原因是这个

a.resize(3); //cols

不是你认为的东西。它基本上没有效果,因为a在这个阶段已经是3号了。

如果你想要一个3乘3矢量矢量,请像这样初始化a

vector<vector <int> > a(3, std::vector<int>(3));