【发布时间】:2012-04-17 08:23:51
【问题描述】:
我有一个包含两个条目的字符串映射:
"Chicago"--> ChicagoObj 和 "NewYork"-->NewYorkObj,其中 ChicagoObj 和 NewYorkObj 是指向 MyClass 对象的指针。
以下代码在 32 位编译和运行良好,它在 64 位编译,但在打印出芝加哥条目后总是在 64 位崩溃。任何帮助表示赞赏!
typedef std::map<std::string, MyClass*> MyStringMap;
MyStringMap my_map;
std::string key1="Chicago";
MyClass *ChicagoObj = new MyClass;
my_map[key1] = ChicagoObj;
std::string key2="NewYork";
MyClass *NewYorkObj = new MyClass;
my_map[key2] = NewYorkObj ;
MyStringMap::iterator iObjMap = my_map.begin();
while (iObjMap != my_map.end())
{
std::string key = iObjMap->first;
std::cout<<"name of the key in the map: " << key <<std::endl;
iObjMap++;
}
【问题讨论】:
-
我看到“string”和“std::string”的混合使用,我认为是错字,否则“string”可能根本不是“std::string”。
-
你不应该使用
C风格的转换和像std::string这样的对象类型,即使在这种情况下它看起来无害。 -
首先,去掉演员表——他们不应该被需要,而且可能掩盖了问题。其次,去掉
printf,它不是类型安全的。您还没有显示MyClass或my_map的定义,这在这里可能很重要。 -
欢迎来到 StackOverflow!您的测试用例至少丢失了
int main()。请创建一个 short、complete 测试用例来演示您的问题。请参阅sscce.org 了解更多信息。 -
@Chad - “代码......确实编译并运行”。这就是为什么我们应该向他询问不运行的代码的更多原因。他发布了有效的代码;大概他还没有发布失败的代码。