2014-11-02 48 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的人的帮助将不胜感激。只是FYI,这里是gsl matrix examples

回答

0

您在从load()返回之前释放矩阵。也许最简单的方式做你在找什么是返回与负载()一gsl_matrix *:

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库,所以如果它适合你,将会非常了解!

+0

是的,这基本上是我做的。谢谢你的帮助!不习惯分配内存,但我意识到我在做什么,一旦我回顾指针。 – jti107 2014-11-11 20:30:18