调用gsl_blas_ddot时,gsl gnu科学库分割错误

时间:2018-12-17 15:48:40

标签: c gsl

当我编译下面的代码时,gcc没有报告错误:

#include <stdio.h>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_blas.h>


int main (void)
{
  int i;

  gsl_vector * v = gsl_vector_alloc (3);

  for (i = 0; i < 3; i++)
    {
      gsl_vector_set (v, i, 1);
    }


  gsl_vector * v2 = gsl_vector_alloc (3);

  for (i = 0; i < 3; i++)
    {
      gsl_vector_set (v2, i, 2);
    }


  double *result ;

  gsl_blas_ddot(v, v2, result) ;


  printf("result of dot product is %f\n", *result );

  return 0;
}

但是我遇到运行时错误:

Segmentation fault (core dumped)

是指对gsl_blas_ddot的调用。我不知道是什么问题。 v和v2向量已正确分配。

1 个答案:

答案 0 :(得分:2)

我不熟悉该库,但是,发布的源代码具有以下声明:

double *result ;

但是,指针result从未设置为指向应用程序拥有的任何内存。

建议更改为:

double result;

并修改以下行:

gsl_blas_ddot(v, v2, result) ;

gsl_blas_ddot(v, v2, &result) ;