Gsl_histogram_find给出分割错误(c++, gsl)
gsl_histogram_find gives segmentation fault (c++, gsl)
我试图写一个简单的程序代码,通过GSL在直方图中读取,然后为x轴上的特定点找到相应的bin索引。代码看起来像这样:
#include <iostream>
#include <string>
#include <cmath>
#include <fstream>
#include <sstream>
#include <gsl/gsl_histogram.h>
int main() {
gsl_histogram* h_transform;
size_t h_Bins = 3;
h_transform = gsl_histogram_alloc(h_Bins);
double range[4] = { 1.0, 10.0, 100.0, 1000.0 };
double bins[3] = {7.0, 0.0011, 9e-02};
gsl_histogram_set_ranges(h_transform, range, 4);
for(int i=0; i<h_Bins; i++) {
h_transform->bin[i] = bins[i];
}
for (size_t i=0; i<h_Bins; i++) {
std::cout << "range[" << i << "] = " << h_transform->range[i] << std::endl;
std::cout << "bin[" << i << "] = " << h_transform->bin[i] << std::endl;
}
std::cout << "range[" << h_range_size << "] = " << h_transform->range[h_range_size] << std::endl;
size_t* h_index;
double x = 1.1;
std::cout << "before find" << std::endl;
gsl_histogram_find(h_transform, x, h_index);
std::cout << "after h_find" << std::endl;
std::cout << "h_index = " << *h_index << std::endl;
std::cout << "get = " << gsl_histogram_get(h_transform, *h_index) << std::endl;
return 0;
}
当我用
编译这段代码时g++ -o gslTest gslTest.cpp -lgsl -lgslcblas -lm
并使用。/gslTest运行它,我得到以下输出:
range[0] = 1
bin[0] = 7
range[1] = 10
bin[1] = 0.0011
range[2] = 100
bin[2] = 0.09
range[3] = 1000
before find
Segmentation fault (core dumped)
现在我无法理解这个问题。几天前我得到了同样的错误,修复了它,现在它又出现了,我不记得修复了…
希望你们中的一些人可能比我更擅长解决这个问题!提前感谢!
一个明显的问题是:
size_t* h_index;
double x = 1.1;
std::cout << "before find" << std::endl;
gsl_histogram_find(h_transform, x, h_index);
假设gsl_histogram_find
的最后一个参数是一个指针,那么你向该函数发送了一个未初始化的指针。gsl_histogram_find
绝对不能对这个指针做任何事情,除了检查它是否为NULL,或者对它解引用,使用它,从而造成混乱。
你可能应该这样做:
size_t h_index;
double x = 1.1;
std::cout << "before find" << std::endl;
gsl_histogram_find(h_transform, x, &h_index);
当一个函数需要指针时,几乎总是意味着该函数需要一个现有实体的地址。
相关文章:
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 将gsl c++程序与"英特尔MKL"链接
- C++ 警告:将新创建的 gsl::owner<> 分配给非所有者
- 没有额外参数的函数的 GSL 数值积分
- 在C++中使用 GSL 最小化
- 减少使用 GSL 用于 ODE 系统的编译资源
- 使用 GSL 库制作样条曲线并使用它们进行集成
- gsl多变量数值积分
- c++的gsl函数替代方案
- 如何使用 GSL 库将雅可比矩阵引用为空指针
- 如何为GSL(GNU科学库)调整C++式随机数引擎?
- GSL+OMP:C++中的线程安全随机数生成器
- 在Windows中构建GSL(GNU科学库)以与VS2015一起使用
- 安装 mply 库时出错.致命错误:gsl/gsl_sf.h:没有这样的文件或目录
- 修改生成文件以添加 GSL 库
- 如何将 std::valarray<double> 与 gsl 集成?
- 在cmakelists.txt中链接GSL
- Python 和 C++:如何将 pybind11 与包括 GSL 库在内的 Cmakelist 一起使用
- 为什么导出的接口库find_dependency (GSL) 失败
- 使用C API使用GSL :: ZSTRING_VIEW