c++ - Igraph 特征向量中心性运行时错误 c++

标签 c++ visual-studio visual-c++ igraph

我正在用 C++ 编写程序,需要生成图形并计算一些度量。我正在使用 Visual Studio 2013 和 Igraph C 库。此时我可以根据自定义信息创建图表并计算一些指标,例如中间值和接近中心性,但是当我尝试计算特征向量中心性时,程序崩溃并显示此消息:

"Run-Time Check Failure #3 - The variable 'tgetv0' is being used without being initialized."

tgetv0 变量用于 Igraph 源的 dgetv.c 内部。 这是我的代码:

void GraphObject::calcEigen()
{
igraph_arpack_options_t options;
igraph_real_t value;
igraph_vector_t weights;
igraph_vector_init(&weights, igraph_ecount(&cGraph));  //cGraph is already created.
igraph_vector_init(&eigenRes, igraph_vcount(&cGraph));  //All ..Res igraph_vector_t are declarated in header
igraph_vector_init(&betweennesRes, 0);
igraph_vector_init(&closenessRes, 0);
igraph_arpack_options_init(&options);

igraph_betweenness(&cGraph, &betweennesRes, igraph_vss_all(), 0, 0, 1);
igraph_closeness(&cGraph, &closenessRes, igraph_vss_all(), IGRAPH_ALL, 0, 1);
igraph_eigenvector_centrality(&cGraph, &eigenRes, &value, 0, 1, &weights, &options);
}

正确计算了接近度和间隔度,但在特征向量函数上崩溃了。

在对文档、互联网和调试器进行大量研究后,我无法确定问题出在哪里,尤其是当我尝试文档中的示例代码时 http://igraph.org/c/doc/igraph-Structural.html#igraph_eigenvector_centrality (复制/粘贴)并制作相同的。这是库问题还是示例问题,我遗漏了什么?

当我初始化权重 vector 然后调用 igraph_null(&weights) 时,它起作用了,但所有特征值的结果都是 1,这是不正确的结果。我做错了什么?

最佳答案

让我们假设 Visual Studio 是正确的,我们确实有一个名为 tgetv0 的变量未初始化使用。我扫描了 igraph 的源代码,看起来确实有两个地方可能是这种情况。其中一个在 src/lapack/dnaupd.c 中,另一个在 src/lapack/dsaupd.c 中。这两个文件都是使用 f2c 从 Fortran 转换而来的,因此很难判断问题是出现在原始 Fortran 代码中还是在转换过程中引入。无论哪种方式,您都可以通过查找在 src/lapack/dnaupd.csrc/lapack/dsaupd 中声明 tgetv0 的行轻松解决此问题。 c 并将其初始化为值 0。在我的版本中,要更改的行是 src/lapack/dnaupd.c 中的第 486 行和 src/lapack 中的第 482 行/dsaupd.c.

请添加评论以确认该解决方案是否适合您 - 如果有效,我将提交一个补丁到 igraph 源代码树。

关于c++ - Igraph 特征向量中心性运行时错误 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096715/

相关文章:

c++ - 如何将静态库或共享库链接到内核模块?

c++ - 如何在 wince 设备(C++)上找到 SD 卡上的可用内存

c++ - 头文件中的 QList 声明导致源文件中出现段错误

c++ - 动态长度字符串数组

c++ - 如何在 C++ 中重载一元和二元减号运算符?

c# - 使用 msbuild 命令行转换 web.config

asp.net - Visual Studio Asp.Net 开发服务器真的是多线程的吗?

Visual Studio 的 JavaScript 项目类型?

c++ - 无缘无故的多重析构函数定义

c++ - 将 System.IO.Ports.SerialPort 代码转换为 boost::asio