小编Gsc*_*der的帖子

在C中使用R_alloc

我有来自R的C代码:

.C("giveProb",as.double(2),as.double(2),as.double(c(0,1,0,1,1,0,1,0)))
Run Code Online (Sandbox Code Playgroud)

我想把它称为一堆(数十万或数百万)次(具有不同的第三个参数),并且当我将它放入for循环中大约100次时它工作正常,但是上面的任何东西都会崩溃R.

我觉得使用R_alloc是一个内存问题.我在C中分配了六个数组,例如:

newCoefArray = (double *)R_alloc(1,curSize * sizeof(double));
Run Code Online (Sandbox Code Playgroud)

但根据R手册"编写R扩展":

此内存从堆中获取,并在.C,.Call或.External调用结束时释放.

我认为这意味着在循环的每次迭代期间将释放内存.但在下一句话中:

用户还可以通过调用vmaxget来记录当前位置并通过调用vmaxset清除随后分配的内存来管理它.这仅建议专家使用.

作为一个离专家不远的人,我希望有人可以提供帮助.C代码完整如下.

#include <R.h>
#include <Rmath.h>
#include <stdio.h>
void giveProb(double *k, double *q,double *order){
double  curSize;
double  tmpSize;
double  *newCoefArray;
double  *oldCoefArray;
double  *newAArray;
double  *oldAArray;
double  *newBArray;
double  *oldBArray;
int     position=0;

long int factorial(int n){
    if(n==0||n==1){
        return(1);
    }
    int tmp=1,i=1;
    while(i<=n){
        tmp=tmp*i;
        i++;
    }
    return(tmp);
} 

void expander(double a, double b,double c,double d,double coeff){
    double leadingTerm=beta(a,b);
    int bb=b; 
    double index[bb], sumLeaders[bb];
    for(int i=0;i<bb;i++){
        index[i]=a+i;
        sumLeaders[i]=factorial(a+b-1)/(factorial(index[i])*factorial(a+b-1-index[i]));
        newCoefArray[i+position]=coeff*leadingTerm*sumLeaders[i]; …
Run Code Online (Sandbox Code Playgroud)

c r

12
推荐指数
1
解决办法
1752
查看次数

标签 统计

c ×1

r ×1