不幸的是,我没有完全开发自己开发的程序。 我最近注意到 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/