【发布时间】:2015-03-21 17:07:34
【问题描述】:
我正在用 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);
}
closeness 和 betwenness 被正确计算为“计算”但在特征向量函数上崩溃。
在对文档、互联网和调试器进行大量研究之后,我无法确定问题出在哪里,尤其是当我尝试了文档 http://igraph.org/c/doc/igraph-Structural.html#igraph_eigenvector_centrality(复制/粘贴)中的示例代码并进行了相同操作时。这是图书馆还是示例问题,我错过了什么?
当我初始化权重向量然后调用 igraph_null(&weights) 时,它可以工作,但所有特征值的结果都是 1,这是不正确的结果。我做错了什么?
【问题讨论】:
-
我很确定这与
weights变量的初始化有关。你的图表有权重吗?如果不是,请不要使用weights参数进行igraph_eigenvector_centrality调用,只需在此处传递一个空指针即可。如果您的图表确实有权重,请先填充weights向量 - 现在它仅包含未初始化的值。 -
感谢塔马斯的回复。我认为这是问题所在,但我尝试传递一个空指针并仍然这样做。图表没有权重,我尝试用 igraph_vector_fill(&weights, 10) 填充权重向量,但什么也没有......退一步我的研究我记得 Msvc 构建有一个 IGRAPH_SUPPORT 定义的错误(通过添加 /DPRPACK_IGRAPH_SUPPORT= 解决1 在命令行上)。这个错误可能是问题的原因吗?
-
不,PRPACK 与特征向量中心性无关。我在下面添加一个可能的答案。
标签: c++ visual-studio visual-c++ igraph