从 lapack 库调用 F77_NAME() 函数时,我的代码崩溃了
我试图从 lapack lib 调用 F77_NAME(dgeqrf)
函数,但程序崩溃了。
你觉得有什么不对吗?
#include <R.h>
#include <R_ext/BLAS.h>
#include <R_ext/Lapack.h>
#include <stdio.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;
}
I'm trying to call the F77_NAME(dgeqrf)
function from lapack lib but the program crashes.
What do you think it is wrong?
#include <R.h>
#include <R_ext/BLAS.h>
#include <R_ext/Lapack.h>
#include <stdio.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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
来自 dgeqrf.f 源代码:
因此,如果您想要最佳运行,您首先需要调用该函数并将“lwork”设置为 -1 以获得“work”的最佳大小。
From dgeqrf.f source code:
So if you want an optimal run you first need to call the function with 'lwork' set to -1 to get the optimal size of 'work'.