如何在 C++ 中检查地图是否为空?

how to check a map is null or not in c++?

我正在尝试在 C++ 中检查地图是否为空。但是,尽管地图不是 NULL,但我遇到了分段错误。代码很简单,在这里:

void func(std::map<std::string, std::vector<Foo*> >* myMap){
   if(myMap == NULL)
      std::cout << "My map is Null" << std::endl;
   else if(myMap->empty())
      std::cout << "My map is empty" << std::endl;
}

参数有时可能是未初始化的映射。当我执行这段代码时,结果是一个段错误。该代码跳过了 if 语句,因为它没有将 myMap 视为 NULL 映射。然后,它在 myMap->empty() 命令中崩溃。当我尝试调用地图的任何函数时它也会崩溃,例如 clear、begin、size 等。所以,如果 myMap 不是 NULL,它会导致这个段的什么样的原因.错误?

需要更多代码才能确定,但​​如果 myMap 不为零,它可能指向 'wrong' 位置(不是您初始化的地图)

也许您使用了不再存在的基于堆栈的地图的地址?没有更多代码我只能猜测。

默认情况下,指针未设置为 NULL,因此调用者可能使用垃圾信息作为参数。 以下使用示例会崩溃:

std::map<std::string, std::vector<Foo*> >* m;
func(m);

这将编译,但会崩溃,因为 m 指向一些垃圾。 设置指针为空更安全:

std::map<std::string, std::vector<Foo*> >* m = NULL;
func(m);

并将按计划工作。

我建议您按值或按引用传递参数而不是按指针(删除 *):

void func(std::map<std::string, std::vector<Foo*> > myMap){