潜在的未初始化的本地指针变量' v'用于boost isomorphism.hpp

时间:2014-04-16 01:35:38

标签: c++ boost

我是新手,我试图将isomorphism.hpp文件用于有向图。

在尝试运行代码时,在boost库文件中我看到了错误

  

1> c:\ boost_1_55_0 \ boost \ graph \ isomorphism.hpp(142):错误C4703:可能未初始化的本地指针变量' v'使用

     

1> c:\ boost_1_55_0 \ boost \ graph \ isomorphism.hpp(147):错误C4703:可能未初始化的本地指针变量' v'使用

这是从这里抛出的,

BGL_FORALL_VERTICES_T(v, G1, Graph1){

    f[v] = graph_traits<Graph2>::null_vertex();  //error thrown here
}

这在boost / graphs / iteration_macros.hpp中定义,如下所示:

#define BGL_FORALL_VERTICES_T(VNAME, GNAME, GraphType) \
for (std::pair<typename boost::graph_traits<GraphType>::vertex_iterator, \
               typename boost::graph_traits<GraphType>::vertex_iterator> BGL_RANGE(__LINE__) = vertices(GNAME); \
  BGL_FIRST(__LINE__) != BGL_LAST(__LINE__); BGL_FIRST(__LINE__) = BGL_LAST(__LINE__)) \
  for (typename boost::graph_traits<GraphType>::vertex_descriptor VNAME; \
    BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true):false; \
     ++BGL_FIRST(__LINE__))

我们需要在哪里定义?这是一个已知的问题吗?

3 个答案:

答案 0 :(得分:0)

  

1&gt; c:\ boost_1_55_0 \ boost \ graph \ isomorphism.hpp(142):错误C4703:可能未初始化的本地指针变量&#39; v&#39;使用

...鉴于

BGL_FORALL_VERTICES_T(v, G1, Graph1)

...和...

#define BGL_FORALL_VERTICES_T(VNAME, GNAME, GraphType)

...我们知道v在宏中称为VNAME。

外环上的条件是:

BGL_FIRST(__LINE__) != BGL_LAST(__LINE__)

内循环的条件是:

BGL_FIRST(__LINE__) != BGL_LAST(__LINE__) ? (VNAME = *BGL_FIRST(__LINE__), true):false;

鉴于内循环不会运行,除非满足外循环条件,我们可以简化:

true                                      ? (VNAME = *BGL_FIRST(__LINE__), true):false;

                                            (VNAME = *BGL_FIRST(__LINE__), true)      ;

显然,VNAME总是被分配给并且从未使用过未初始化的。您的编译器分析存在缺陷,您应该禁用警告(如果可能的话,仅针对此特定代码),否则关闭任何treat-warnings-as-errors编译器选项,这样您的构建就不会中断完全或尝试其他编译器。

答案 1 :(得分:0)

转到

return '\n'.join(v.get('value') for v in filtered_dict.values())

在那里,您应该将“ SDL检查”从Project > "ProjectName" Properties > C/C++ > General 切换到Yes

答案 2 :(得分:0)

已启用C ++ 20并且警告级别4的Visual Studio 2019(平台工具集v142)提供了很多警告。使其静音:

#pragma warning(push)
#pragma warning(disable: 4244) // '-=': conversion from '__int64' to 'int', possible loss of data
#pragma warning(disable: 4267) // '=' : conversion from 'size_t' to 'int', possible loss of data
#pragma warning(disable: 4456) // declaration of 'xxx' hides previous local declaration
#pragma warning(disable: 4701) // potentially uninitialized local variable 'xxx' used
#pragma warning(disable: 4703) // potentially uninitialized local pointer variable 'xxx' used
#include <boost/graph/isomorphism.hpp>
#pragma warning(pop)