使用MAP指针时运行时错误
runtime error when using pointer of map
如何使用指针访问地图元素?我搜索并得到了运行时错误的此信息:
#include<bits/stdc++.h>
using namespace std;
map<string, int> *myFruit;
int main()
{
(*myFruit)["apple"] = 1;
}
正确的方法是什么?我搜索但找不到任何有用的东西。
在可能的情况下避免使用指针,尤其是对于简单的任务。更喜欢用值编程。
#include <map>
#include <string>
int main()
{
std::map<std::string, int> myFruit;
myFruit["apple"] = 1;
}
除了避免使用指针外,还有其他值得一提的东西。您的示例将myFruit
定义为全局变量。指针容易出错,全球变量很危险,将它们放在一起,您可能迟早会陷入困境。由于main
启动了您的程序,因此您可以将MyFruit传递给将使用它的功能,从而使变量的范围大大减少,从而使代码更容易理解。
通过阅读其中一条评论中链接的代码,我相信您可以通过多种方法可以改进您的代码。
函数应将其作为参数运行的所有数据获取。这消除了对全球群体的任何需求,唯一的例外应该是极端边缘案例。
尝试适当地命名您的功能,
getsz
是一个差的名称,get_size
会更好,但是它仍然具有误导性,因为该函数不返回值,实际上会突变全局。没有人会期望观察到突变全局变量。理想情况下,该方法将具有
之类的签名int calculate_size(int vertexIndex, int parentVertexIndex, const std::vector<std::vector<int>>& vertices);
在map<string, int> *myFruit;
中,MyFruit是指向地图的指针。但是问问自己,它指向的地图实例是什么?答案是:没有。尚未将其指向任何实例。您根本没有初始化它。并且您的示例程序永远不会在任何地方创建地图的任何实例!
因此,尝试使用MyFruit会引起问题也就不足为奇了。
请记住,指针与指向的内容之间存在区别。如果这还不清楚,请在C 上找到一些好的教育材料并阅读它们。
在此示例中,我们可以通过创建(又名分配)指向指针的实例来解决问题。例如map<string, int> *myFruit = new map<string, int>();
当然应该记住稍后再正确地 delete
。
尽管正如其他评论所涉及的那样,在这样一个简单的例子中,似乎很愚蠢,甚至使用这样的指针。直接创建一个实例会更容易,例如map<string, int> myFruit;
现在,如果您实际上是在尝试执行诸如将地图传递给函数之类的事情,那么您可能有理由通过指针(例如void SomeFunction(map<string, int> *parameter)
)。但是正如评论所提到的,这可能会通过参考(例如void SomeFunction(map<string, int> ¶meter)
。
但是,如果您想做的其他事情确实认为您需要一个指针,并且如果您无法使其正常工作,那么也许您应该问一个有关您的问题的问题重新尝试做和原因。
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 运行时错误:基0x000000000000溢出到0xffffffffffffffff的指针索引表达式 (basic_st
- 在指向矢量的智能指针上使用 push_back() 时运行时错误
- C 代码的运行时错误(基于指针)
- 使用MAP指针时运行时错误
- C 指针运行时错误
- C++指针运行时错误 - 使用指针设置变量然后检索
- 返回指针时运行时错误
- 访问指针类成员变量c++时发生运行时错误
- 成员函数指针运行时错误——ESP的值在函数调用中没有正确保存
- 运行时错误C++程序:检测到glibc,munmap_chunk(),指针无效
- 内存运行时错误:我们在哪里删除这个指针
- 传递派生类指针时的运行时错误
- 数组和指针 - 运行时错误
- c++对象指针的优先级队列在运行时错误为无效堆
- 指向结构的指针出现运行时错误
- 检查指针是否为NULL并导致运行时错误