从lapack库调用F77_NAME()函数时,我的代码崩溃了

时间:2011-04-17 09:31:49

标签: c r lapack

我正在尝试从lapack lib调用F77_NAME(dgeqrf)函数,但程序崩溃了。 你认为这是错的?

#include <stdio.h>
#include <R.h>
#include <R_ext/BLAS.h>
#include <R_ext/Lapack.h>

double* getcopy(int* nrow, int* ncol,double* a)
{
    double* copy = malloc(*nrow**ncol*sizeof(double));
    int i;
    for(i=0;i<*nrow**ncol;i++)
    {
        copy[i] = a[i];
    }
    return copy;
}

int main() {
int m=3,n=3;
double a[] = {12,-51,4,6,167,-68,-4,24,-41};
double* acopy = getcopy(&m,&n,a);

double tau[3];
int info=0;
int i;

int one=1;
double* work = malloc(max(&one,&m)*sizeof(double));
int lwork = 0;
int lda = max(&m,&n);

F77_NAME(dgeqrf)(&m,&n,acopy,&m,tau,work,&lwork,&info);

for(i=0;i<m*n;i++)
printf("%f",acopy[i]);

return 0;
}

1 个答案:

答案 0 :(得分:0)

来自dgeqrf.f源代码:


*  LWORK   (input) INTEGER
*          The dimension of the array WORK.  LWORK >= max(1,N).
*          For optimum performance LWORK >= N*NB, where NB is
*          the optimal blocksize.
*
*          If LWORK = -1, then a workspace query is assumed; the routine
*          only calculates the optimal size of the WORK array, returns
*          this value as the first entry of the WORK array, and no error
*          message related to LWORK is issued by XERBLA.

因此,如果您想要一个最佳运行,首先需要调用函数并将'lwork'设置为-1以获得最佳“工作”大小。