C++ can';t访问映射元素(c+;+;)

C++ can';t访问映射元素(c+;+;),c++,dictionary,format,C++,Dictionary,Format,我有一个非常奇怪的问题: 我正在通过一个xml文件读取,并将所有属性/值作为键/值放在map myMap中。 我的问题是,我可以通过迭代器访问和打印所有键/值,但我不能直接访问它(*mymap)[“key”]:程序在运行期间崩溃 更奇怪的是:我可以添加一个已经在映射中的键,当我遍历映射并打印它时,我可以看到这两个相同的键具有不同的值 我的猜测是,我的xml文件的字符串格式可能与通常的略有不同,因此键似乎与字符串相同,但它们可能不是二进制格式 您知道这个问题吗?您正在使用指向char(而不是c字符

我有一个非常奇怪的问题: 我正在通过一个xml文件读取,并将所有属性/值作为键/值放在
map myMap
中。 我的问题是,我可以通过迭代器访问和打印所有键/值,但我不能直接访问它
(*mymap)[“key”]
:程序在运行期间崩溃

更奇怪的是:我可以添加一个已经在映射中的键,当我遍历映射并打印它时,我可以看到这两个相同的键具有不同的值

我的猜测是,我的xml文件的字符串格式可能与通常的略有不同,因此键似乎与字符串相同,但它们可能不是二进制格式


您知道这个问题吗?

您正在使用指向char(而不是c字符串)的指针作为键。指针实际上是内存中的地址,所以当你

(*mymap)["key"]
字符串文字“key”将作为四个元素的数组放置在堆栈顶部。由于键是pointe,第一个元素的地址将被传递到操作符括号中。此值与之前存储为键的值没有任何共同之处,将为堆栈上的此指针创建一个新值,它将是一个空指针

下面是比较c字符串时发生的情况

const char* a = "key"; // Something like 0xac22f214 <- address on the stack
const char* b = "key"; // 0xac22f218
a == b; // False
a < b; // True
a > b; // False
const char*a=“key”//类似于0xac22f214 b;//假的

出于您的目的,最好使用std::string并了解指针的工作原理。

char*
替换为
std::string
。指针做的键很糟糕。而
mymap
是无效指针。避免使用指针。给定
mymap
的类型,从中索引的语法是完全有效的。它听起来更像是
mymap
或是
NULL
。您可能正在尝试取消对空指针或其他对象的引用。如果不查看您的代码,我们无法告诉您更多。您是否实际映射了
map
map
?使用指针作为键使用实际指针作为键,而不是它所指向的。实际上,我的映射是
map