0
我試圖從lapack lib調用F77_NAME(dgeqrf)函數,但程序崩潰。 您認爲這是錯誤的?從lapack庫調用F77_NAME()函數時,我的代碼崩潰
#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;
}
是不是應該執行'int lwork = max(&one,&m)'以便LAPACK知道工作區的大小?否則,這似乎是好的,你絕對應該使用調試器來查看哪一行會導致程序崩潰。 – 2011-04-17 09:36:59
而不是調試器,使用幾個放置良好的'printf()'語句就足夠了。 – Philip 2011-04-17 09:44:28
:))我無法相信它,它的工作原理,它需要最大(&一,&m)...需要更仔細,並在10小時的編碼後睡覺 – cfort 2011-04-17 14:53:30