我目前的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&lt; 0xC0000005&gt;
我花了很多时间试图发现bug的来源,但遗憾的是没有取得多大成功。我一般不确定为什么会发生崩溃。调试器不打印警告或错误消息。
答案 0 :(得分:0)
我要建议你可能有不匹配的标题和库。也许安装了多个版本的GSL。您拥有源中引用的一个版本的头文件,链接器引用其他版本的库。
我查找了gsl_vector_view
的typedef并最终到了这里,你甚至可以看出这个版本甚至不支持该结构的向量成员类型。
通常在使用某些单位指针时,您将收到此0xC0000005错误。这并不是说你的指针在这里没有被初始化。我会说正在发生的事情是&column.vector
的'vector'位被解释为不同于预期的东西。
总之,我认为这可能是某种环境问题,也许是您的链接器设置?有关如何在此配置这些内容的详细信息:http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/
希望这有帮助。