std :: map работает в Windows 32bit, но падает на 64bit - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть строковая карта с двумя записями: "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++;
}

Ответы [ 2 ]

0 голосов
/ 04 апреля 2012

Поскольку вы, очевидно, не будете публиковать полный, компилируемый кусок кода, чтобы продемонстрировать проблему, вот короткая демонстрация того, как она может работать:

#include <map>
#include <iostream>
#include <string>
#include <iterator>

class City {
    unsigned int population;
    // probably more stuff here, but this should be enough for now.
public:
    City(int pop=0) : population(pop) {}

    friend std::ostream &operator<<(std::ostream &os, City const &c) {
        return os << c.population;
    }

};


std::ostream &operator<<(std::ostream &os, 
                         std::pair<std::string, City> const &d) 
{
    return os << d.first << ": " << d.second;
}

int main() {
    std::map<std::string, City> cities;
    typedef std::pair<std::string, City> ct;

    cities["Chicago"] = City(3456789);
    cities["New York"] = City(8765432);

    std::copy(cities.begin(), cities.end(), 
        std::ostream_iterator<ct>(std::cout, "\n"));

    return 0;
}

Я скомпилировал и протестировал это на 64Windows, и, кажется, работает нормально.Казалось бы (по крайней мере мне), что map работает на 64-битной Windows без проблем.Трудно догадаться, что именно вы сделали, что нарушает, но может быть проще расширить рабочий код, чтобы делать то, что вы хотите, чем выяснить, что сломано в коде, который не работает.

0 голосов
/ 03 апреля 2012

Вы уверены, что скомпилировали последний код и не запускаете программу с предыдущей ошибкой? Я скомпилировал ваш код в Visual Studio 2010 на Windows 7 64, и проблем нет.

В вашем коде есть ошибка компиляции, std::out должно быть std::cout. Кроме этого, нет даже предупреждения от /Wall.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...