c - 将 GNU 科学库与 Code::Blocks 一起使用时出错

标签 c matrix codeblocks gsl

我当前的 Code::Blocks(GNU GCC 编译器)设置有一个特别的问题。编译器似乎有选择地运行一些 GSL 函数,但由于某些原因,在命令执行其他 GSL 函数时似乎会出现很大问题。

例如,我从以下目的地提取了以下代码: https://www.gnu.org/software/gsl/manual/html_node/Example-programs-for-matrices.html

我假设因为代码来自 GNU 官方网站,所以代码是正确的:

#include <math.h>
#include <stdio.h>
#include <gsl/gsl_matrix.h>
#include <gsl/gsl_blas.h>

int
main (void)
{
  size_t i,j;

  gsl_matrix *m = gsl_matrix_alloc (10, 10);

  for (i = 0; i < 10; i++)
    for (j = 0; j < 10; j++)
      gsl_matrix_set (m, i, j, sin (i) + cos (j));

  for (j = 0; j < 10; j++)
    {
      gsl_vector_view column = gsl_matrix_column (m, j);
      double d;

      d = gsl_blas_dnrm2 (&column.vector);

      printf ("matrix column %d, norm = %g\n", j, d);
    }

  gsl_matrix_free (m);

  return 0;
}

通过调试,我了解到错误的来源是下面一行:

d = gsl_blas_dnrm2 (&column.vector);

此时编译器崩溃并打印出以下错误信息:

进程返回 -1073741819 <0xC0000005>

我花了很多时间试图找出错误的来源,但遗憾的是没有取得太大的成功。我通常不确定为什么会发生崩溃。调试器不打印任何警告或错误消息。

最佳答案

我建议您可能有不匹配的 header 和库。可能安装了不止一个版本的 GSL。您在源代码中引用了一个版本的 header ,而链接器引用了其他版本的库。

我去查找 gsl_vector_view 的 typedef 并在此处结束,您甚至可以看出 this 版本甚至不支持 vector 成员属于那种结构类型。

您将收到此 0xC0000005 错误,通常是在您使用某些未初始化的指针时。不过,这并不是说您的指针在这里未初始化。我想说的是 &column.vector 的“vector ”位被解释为与预期不同的东西。

总而言之,我认为这是某种环境问题,可能与您的链接器设置有关?这里有一些关于如何配置这些的细节:http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/

希望这对您有所帮助。

关于c - 将 GNU 科学库与 Code::Blocks 一起使用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24659573/

相关文章:

matrix - 使用 Julia 计算网格中点的矩阵表达式

javascript - 在 Canvas 中旋转图像并保持其可拖动

c++ - SDL2 C++ - multimap 像渲染错误

c - 函数如何返回指向堆分配对象的指针

arrays - C如何将.txt文件的内容放入二维数组

c - 解释 C 中的变量声明

code::blocks 在 C 中的默认 hello world 以状态 1993077897 或 -1073741510 终止

c - C : Function not changing array data 中的冒泡排序

c++ - Eigen 无法给出正确的矩阵逆 (c++)

c++ - C :B compiler issue with wxwidgets project