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

Igraph eigenvector centrality Run-Time error c++

本文关键字:运行时错误 c++ 特征 向量 Igraph      更新时间:2023-10-16

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

"运行时检查失败 #3 - 变量'tgetv0'在未初始化的情况下被使用。"

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);
}

接近度和中间性被正确地计算为"couted",但在特征向量函数上崩溃。

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

当我初始化权重向量然后调用 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.c 中声明 tgetv0 并将其初始化为值 0 来轻松解决此问题。在我的版本中,要更改的行是 src/lapack/dnaupd.c 中的第 486 行和src/lapack/dsaupd.c中的第 482 行。

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