C++ STL 容器中的 NULL 指针

标签 c++ access-violation tr1 fatal-error unordered-set

不幸的是,我没有完全开发自己开发的程序。 我最近注意到 unordered_set 的 operator-- 上的 Visual Studio fatal error ,它是通过简单插入指向 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 值。您是在谈论容器的内部结构变得困惑吗?

关于C++ STL 容器中的 NULL 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067611/

相关文章:

c++ - 在对其成员之一进行排序后移动结构数组的其余成员

c++ - 使用可转换类型调用重载函数时模板构造函数歧义

c++ - 从两个不同类继承的非虚拟基类的访问成员

c++ - 在 64 位 Windows 上将字符串从 C++ 返回到 C# 时如何防止 AccessViolationException?

c++ - 为什么未初始化的指针会导致接近 0 的内存访问冲突?

c++ - c++中map和unordered_map的性能差异

c++ - 初始化类模板的static constexpr成员变量

c - ValedasFloresRetail.exe : 0xC0000005: Access violation writing location 0x00000000 中 0x775615de 的未处理异常

c++ - unordered_multimap::equal_range 慢

c++ - 使用 tr1::shared_ptr 类型实现 std::equal