如何在 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){
我正在尝试在 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){