将GSL数组传递给其他函数

时间:2014-11-02 03:21:18

标签: c arrays function matrix gsl

我是使用GSL的新手,我想知道如何将GSL数组从一个函数返回到另一个函数。它不像一个正常的阵列...我已经尝试了一段时间,我没有强大的C背景,这让我发疯。这里有两个伪函数,显示了我想要做的事情。

这是主要功能

#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

1 个答案:

答案 0 :(得分:1)

在从load()返回之前,您正在释放矩阵。也许最简单的方法就是从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库,所以如果它适合你,那就太棒了!