LAPACK을 사용하여 C에서 Kalman 필터를 구현하려고하는데 회귀 분석을 통해 일부 매개 변수를 추정해야합니다. dgels을 사용하고 있지만 실행하려고하면 이상한 segfault가 계속 발생합니다. LWORK 매개 변수에서 설정 한 블록 크기와 관련이있을 것으로 생각하여 LWORK = -1로 설정하여 최적의 크기를 쿼리했습니다. 문서에 따르면 WORK의 첫 번째 요소는 LWORK의 최적 값을 포함해야합니다. 하지만 WORK [0]에 액세스하려고하면 dgels를 호출하기 전에 할당 했음에도 불구하고 또 다른 segfault를 얻습니다! 무슨 단서가 있니? 여기에 코드가 있는데, double *A, *B
과 int p->N
을 할당 한 비트를 뺀 것입니다.LAPACK의 dgels에 대한 최적의 블록 크기 쿼리
char T = 'T'; // Transpose A
int n = 1000;
int LWORK = -1;
int INFO = 0;
double * WORK = (double *) malloc (200*sizeof(double));
printf("%e\n",WORK[0]); // This works
dgels_(&T, &(p->N), &n, &(p->N), A, &(p->N), B, &n, &WORK, &LWORK, &INFO);
printf("%e\n",WORK[0]); // This segfaults
GCC 4.2.1, 맥 OS X 스노우 레오파드 (Snow Leopard)
편집 : 인텔이 here
코드를 게시 할 수 있습니까? –
Fortran 바인딩에서 일반적인 오류로 잘못된 너비 int가 사용되었습니다. – Anycorn
다른 너비 int를 어떻게 전달합니까? 서명 안돼? 대신 짧은 것을 시도해보십시오. –