我是使用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
答案 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库,所以如果它适合你,那就太棒了!