visual studio — центральность собственного вектора Igraph Ошибка времени выполнения Переполнение стека

Я пишу программу на c ++, которая должна генерировать графики и вычислять некоторые показатели. Я работаю с Visual Studio 2013 и библиотекой Igraph C. На этом этапе я могу создавать графики из пользовательской информации и вычислять некоторые метрики, такие как между значениями центральности и близости, но когда я пытаюсь вычислить центральность собственного вектора, происходит сбой программы и отображается следующее сообщение:

«Ошибка проверки времени выполнения № 3 — переменная ‘tgetv0’ используется без инициализации.»

Переменная tgetv0 используется внутри dgetv.c из источника Igraph.
Вот мой код:

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 (копировать / вставить) и делает то же самое. Это проблема с библиотекой или примером, я что-то упустил?

Когда я инициализирую вектор весов, а затем вызываю igraph_null (&веса), это работает, но результат всех собственных значений равен 1, и это неверный результат. Что я делаю не так?

2

Решение

Давайте предположим, что Visual Studio прав, и у нас действительно есть переменная с именем tgetv0 который используется неинициализированным. Я отсканировал исходный код igraph, и похоже, что есть два места, где это действительно может быть. Один из них находится в src/lapack/dnaupd.cдругой находится в src/lapack/dsaupd.c, Оба эти файла были конвертированы из Фортрана с помощью f2c поэтому трудно сказать, присутствовала ли проблема в исходном коде Фортрана или была ли она введена во время преобразования. В любом случае, вы можете легко это исправить, посмотрев вверх tgetv0 объявлен в src/lapack/dnaupd.c а также src/lapack/dsaupd.c и инициализация его значением 0. В моей версии строки для изменения — это строка 486 в src/lapack/dnaupd.c и строка 482 в src/lapack/dsaupd.c,

Пожалуйста, добавьте комментарий, чтобы подтвердить, работает ли решение для вас или нет — если оно будет работать, я добавлю патч к исходному дереву igraph.

0

Другие решения


По вопросам рекламы [email protected]