2014-11-02 2 views
0

GSL을 처음 사용하고 한 함수에서 다른 함수로 GSL 배열을 반환하는 방법이 궁금합니다. 그게 정상적인 배열과는 다르다 ... 나는 이것을 잠시 동안 알아 내려고 노력해 왔으며 강한 C 배경을 갖지 못한다. 그리고 이것은 나를 미치게 만든다. 다음은 내가하려고하는 것을 보여주는 두 가지 의사 함수입니다.GSL 배열을 다른 함수에 전달

이 주 기능

#include <stdio.h> 
#include <stdlib.h> 
#include <gsl/gsl_matrix.h> 

void load(gsl_matrix * a);  

int main() 
{ 
int row, col,i,j; 
row = 6; col = 25; 
gsl_matrix *a = gsl_matrix_alloc(6,25); 

load(a); 

for (i = 0; i < 6; i++) 
    for (j = 0; j < 25; j++) 
    printf ("a[%d,%d] = %g\n", i, j, 
     gsl_matrix_get (a, i, j)); 


return 0; 
} 

되고이 파일에서 매트릭스로 로딩로드 함수이다. 이 부분은 작동하는 것 같다. 나는이 함수의 결과를 메인 함수로 가져올 수 없다.

#include <stdio.h> 
#include <stdlib.h> 

#include <gsl/gsl_matrix.h> 

void load(gsl_matrix * a) 
{ 
int row_size, col_size; 
row_size = 6; col_size = 25;  
int status_obs; 
gsl_matrix * obs_map = gsl_matrix_alloc(row_size,col_size); 

FILE *f = fopen("obs_map.dat","r"); 
status_obs = gsl_matrix_fscanf(f,obs_map); 
fclose(f); 

a = obs_map;  

if(status_obs == 0) 
    printf("Obstacle map loaded: %dx%d\n",row_size,col_size); 

gsl_matrix_free (obs_map); 

} 

바보 같은 질문 인 경우 사과 드리지만 올바른 방향으로 조금만 기울여야합니다. GSL을 사용하는 사람의 도움을 주시면 감사하겠습니다. 그냥 참고하시기 바랍니다. gsl matrix examples

답변

0

load()에서 돌아 오기 전에 매트릭스를 해제하고 있습니다. 내가 GSL 라이브러리가 설치된 것을 얻으려고하지 않았기 때문에 나는이 컴파일되지 않은

gsl_matrix* load() { 
int row_size, col_size; 
row_size = 6; col_size = 25;  
int status_obs; 
gsl_matrix * obs_map = gsl_matrix_alloc(row_size,col_size); 

FILE *f = fopen("obs_map.dat","r"); 
status_obs = gsl_matrix_fscanf(f,obs_map); 
fclose(f); 

a = obs_map;  

if(status_obs == 0) 
    printf("Obstacle map loaded: %dx%d\n",row_size,col_size); 

return obs_map; 
//Don't free it! 
//gsl_matrix_free (obs_map); 

} 

int main() { 
int row, col,i,j; 
row = 6; col = 25; 
gsl_matrix *a = load(); 

//load(a); 

for (i = 0; i < 6; i++) 
    for (j = 0; j < 25; j++) 
    printf ("a[%d,%d] = %g\n", i, j, 
     gsl_matrix_get (a, i, j)); 

//Now you can free it 
gsl_matrix_free(a); 

return 0; 
} 

주 그래서 : 부하에서 gsl_matrix의 *()를 호출하는 것입니다 어쩌면 가장 간단한 방법은 당신이 찾고있는 것을해야 할 일 그것이 당신을 위해 작동한다면, 잘 알 것입니다!

+0

옙 이것은 본질적으로 내가 한 일입니다. 당신의 도움을 주셔서 감사합니다! 메모리를 할당하는 데 익숙하지 않았지만 포인터를 리뷰 한 후에는 내가 무엇을했는지 깨달았다. – jti107