Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
libstdc&x2B中的Bug+;关于std::列表分配? 我最近遇到了一个非常有趣的不一致,而使用LIbxML++(一个用于LIbxML2的C++包装)。_C++_List_Gcc_C++11_Std - Fatal编程技术网

libstdc&x2B中的Bug+;关于std::列表分配? 我最近遇到了一个非常有趣的不一致,而使用LIbxML++(一个用于LIbxML2的C++包装)。

libstdc&x2B中的Bug+;关于std::列表分配? 我最近遇到了一个非常有趣的不一致,而使用LIbxML++(一个用于LIbxML2的C++包装)。,c++,list,gcc,c++11,std,C++,List,Gcc,C++11,Std,库使用默认的STL列表容器(std::list)返回节点列表。 由于它是从默认存储库安装的,所以它似乎是在C++03模式下构建的(但我正在使用C++11) 这里需要注意的是,C++11改变了std::list::size()的工作方式。 在C++03中,它是O(n),每次调用std::distance(begin(),end()),现在它返回预先计算的值 代码如下: /** Returns the number of elements in the %list. */ size_ty

库使用默认的STL列表容器(
std::list
)返回节点列表。 由于它是从默认存储库安装的,所以它似乎是在C++03模式下构建的(但我正在使用C++11)

这里需要注意的是,C++11改变了
std::list::size()
的工作方式。
在C++03中,它是O(n),每次调用
std::distance(begin(),end())
,现在它返回预先计算的值

代码如下:

  /**  Returns the number of elements in the %list.  */
  size_type
  size() const _GLIBCXX_NOEXCEPT
  {
#ifdef __GXX_EXPERIMENTAL_CXX0X__
    return this->_M_impl._M_size;
#else
    return std::distance(begin(), end());
#endif
  }
当我从库中收到这样一个列表并对其调用
size()
时,事情就开始发生了。在那个里,我读到了140734320138496这样的值,这清楚地表明了一个未初始化的计数器:在原始列表中,根本并没有计数器。
当然,手动调用std::distance(list.begin(),list.end())确实有效


问题是-这可以被认为是GCC/libstdc++中的一个bug,还是我永远不应该链接在不同GCC模式下构建的可执行文件?

我认为这违反了一个定义规则。编译代码时使用的
std::list
定义与库使用的定义不同。(这是未定义的行为,不是GCC错误。)

您应该重新编译库(或重新编译代码)