首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在lapacke的dgels函数中使用malloc

在lapacke的dgels函数中使用malloc
EN

Stack Overflow用户
提问于 2014-04-18 00:10:49
回答 1查看 171关注 0票数 1

当我使用malloc函数的时候,我正在尝试使用lapacke的dgels函数。它没有给出正确的值。谁能告诉我,当我使用malloc并创建一个矩阵时,错误是什么?谢谢你

代码语言:javascript
复制
 /* Calling DGELS using row-major order */

#include <stdio.h>
#include <lapacke.h>
#include <conio.h>
#include <malloc.h>

int main ()
{
double a[3][2] = {{1,0},{1,1},{1,2}};

double **outputArray;
int designs=3;
int i,j,d,i_mal;
lapack_int info,m,n,lda,ldb,nrhs;
double outputArray[3][1] = {{6},{0},{0}};*/



outputArray = (double**) malloc(3* sizeof(double*)); 
for(i_mal=0;i_mal<3;i_mal++)
{
outputArray[i_mal] = (double*) malloc(1* sizeof(double));  
}
for (i=0;i<designs;i++)
{
printf("put first value");
scanf("%lf",&outputArray[i][0]);
}

m = 3;
n = 2;
nrhs = 1;
lda = 2;
ldb = 1;




info = LAPACKE_dgels(LAPACK_ROW_MAJOR,'N',m,n,nrhs,*a,lda,*outputArray,ldb);

for(i=0;i<m;i++)
{
for(j=0;j<nrhs;j++)
{
printf("%lf ",outputArray[i][j]);
}
printf("\n");
}
getch();

return (info);}

EN

回答 1

Stack Overflow用户

发布于 2014-04-18 05:20:49

问题可能来自于内存中的outputArray不连续。您可以使用下面这样的代码:

代码语言:javascript
复制
 outputArray = (double**) malloc(3* sizeof(double*)); 
 outputArray[0]=(double*) malloc(3* sizeof(double));
 for (i=0;i<designs;i++){
     outputArray[i]=&outputArray[0][i];
 }

别忘了释放内存!

代码语言:javascript
复制
 free(outputArray[0]);
 free(outputArray);

编辑:连续意味着你必须一次为所有的值分配内存。参见http://www.fftw.org/doc/Dynamic-Arrays-in-C_002dThe-Wrong-Way.html#Dynamic-Arrays-in-C_002dThe-Wrong-Way:一些包,如fftw或lapack,需要此功能进行优化。当您调用malloc三次时,您创建了三个部分,结果出了问题。

如果您只有一个右侧,则不需要2D数组(double**)。outputArray[i]是一个double*,也就是第i行的开始(主要行)。如果您有许多RHS,那么正确的行可能是outputArray[i]=&outputArray[0][i*nrhs];

通过在您的代码中这样做,您正在构建一个3行、1列的RHS。该解决方案的大小为n=2。应该是outputArray[0][0] , outputArray[1][0]。我希望我没有太错,在简单的案例中检查一下!

再见,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23138259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档