繁体   English   中英

C ++ STL容器中的NULL指针

[英]C++ a NULL pointer in the STL container

不幸的是,我没有完全在自己开发的程序上工作。 最近,我注意到操作符上出现了Visual Studio致命错误-unordered_set,这是通过简单地插入指向unordered_set的指针来调用的。 在检查了本地人之后,我注意到set仅包含2个元素,最后一个为NULL(所以我想这就是它崩溃的原因)。 现在开始思考一个问题:unordered_set(或任何其他STL容器)如何(理论上)如何获得NULL指针作为其元素之一。 程序是多线程的,但是根据我的评论,那部分代码只能从一个线程访问。 谢谢。

为感兴趣的人员提供调用堆栈和部分源代码: http ://privatepaste.com/c8e7f35a4e(PushToProcessed是从Object本身调用的,它传递对自身的引用,因此不能为NULL)

集可以包含可以为NULL的指针。

#include <iostream>
#include <vector>

int main () {
    std::vector<int *> foo;
    foo.push_back (NULL);
    std::cout << foo.size () << std::endl;
    return 0;
}

容器可以轻松包含NULL值。 您是在谈论容器内部混乱吗?

NULL是一个完全有效的指针值。 如果传入NULL,则将其与任何内存地址一样对待。 由于您仅看到2个条目,因此我猜测您真正看到的是将许多NULL指针“添加”到您的集合中,但是由于它是一个集合,因此仅保留一个副本。

编辑:

为了检验我的假设,即许多项目都添加了所有NULL值,为什么不对cout进行简单调用,说明“指针添加了新项目,其中address =”。 打赌,您会感到惊讶。

我相信可以通过取消引用的非常量迭代器来设置容器指针值,如(* iter)= NULL。 这当然是不好的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM