У меня есть следующие использования карт с парой в качестве ключа, и это segfaults. Есть идеи? - PullRequest
0 голосов
/ 21 июля 2009

Я упростил пример, чтобы помочь с надежностью. Ошибка следует за кодом:

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

    using namespace std;



    class A
    {

    public:
        map<pair<string, string>, string* > m;
        string str;

        A():str("sdfsd")
        {
            m[make_pair("aa","bb")]=&str;

        }   
        void foo()
        {
            map<pair<string, string>, string*>::iterator iter =m.begin();
            cout<<"In A::foo:\n";
            for(; iter!=m.end(); iter++)
            {
                pair<string, string> keys=iter->first;
                cout<<"map and test = "<<str<<" and "<<*iter->second<<endl;
            }
        } 
    };

    int main()
    {
    A a;
    a.foo();
    }

В основном файле:

 #0  0x0066f6c7 in std::string::_Rep::_M_grab () from
 /usr/lib/libstdc++.so.5
 #1  0x0066f80c in std::basic_string,
 std::allocator >::basic_string
 () from /usr/lib/libstdc++.so.5
 #2  0x087e1e69 in pair (this=0xbfff7070,
 _ctor_arg=@0x9c087d0) at (pair keys=iter->first;)

1 Ответ

1 голос
/ 21 июля 2009

Это проблема компилятора? Это выглядит как странная оптимизация компилятора, особенно когда псевдоним iter-> first делает разницу.

Только что опубликовано на онлайн-компиляторе на http://codepad.org/ZhYvtj9v и это дало правильный результат, без segfault.

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