我正在尝试使用lapacke的dgels函数: 当我使用malloc fucntion时。它没有给出正确的价值。 请问有什么人在使用malloc并创建矩阵时会出现什么错误? 三江源
/* 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); }
答案 0 :(得分:0)
问题可能来自outputArray
在内存中不连续。你可以改用这样的东西:
outputArray = (double**) malloc(3* sizeof(double*));
outputArray[0]=(double*) malloc(3* sizeof(double));
for (i=0;i<designs;i++){
outputArray[i]=&outputArray[0][i];
}
不要忘记释放记忆!
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行,一列,即一个RHS。解决方案的大小为n=2
。它应该是outputArray[0][0] , outputArray[1][0]
。我希望我没错,请在简单的情况下查看!
再见,