问题:从Rcpp函数返回c样式的指针

时间:2018-10-14 14:01:08

标签: c++ r rcpp

我正在研究Rcpp,遇到了一个有趣但很奇怪的问题。

本质上int *a = new int(1);的工作方式与以下方式不同:

  int b = 1;
  int *a;
  a = &b;

任何想法为何?完整代码如下。如果我取消注释int *a = new int(1);,则下面的代码将按预期工作。

#include <Rcpp.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace Rcpp;
using namespace std;

// [[Rcpp::export]]
int bar(SEXP a) {
  Rcpp::XPtr<int> ptr(a);
  int b = *ptr;

  cout << b;
  return (b);
}


// [[Rcpp::export]]
SEXP foo() {
  // int *a = new int(1);

  int b = 1;
  int *a;
  a = &b;

  cout << *a;
  Rcpp::XPtr<int> ptr(a);
  return ptr;
}

然后在R中:我希望得到b = 1

> a = foo()
1
> b = bar(a)
0
> b
[1] 0

================================================ =========================== 编辑: 我的问题实际上源自Pass a c++ object as a pointer an reuse in another function in Rcpp,但是当我希望在下面测试c样式的指针时

  int b = 1;
  int *a;
  a = &b;

替换int *a = new int(1);时,它根本无法按预期工作。这就是为什么我在这里问这个问题。

0 个答案:

没有答案