2009-07-20 8 views
0

例を簡単にして再利用性を向上させました。コアファイルで私はペアをキーとして以下のマップを使用し、segfaultsを持っています。何か案は?

#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, 
[email protected]) at (pair keys=iter->first;) 
+2

あなたはおそらく別のことを台無しにしました。私はその例が良いと思う。 「シンプルでない」コードを表示してください。それはすべてその1つのプログラムですか?あるいは、あなたのプログラムはバイナリライブラリで構成されていますか? Iirc、libstdC++。so.5はかなり古いです。 ABIの問題かもしれません。 –

+0

私はconst pair &keys = iter-> firstで奇妙に修正しました。 同じプログラムを実行しますが、同じプログラムで正確なパターンは 大きなプログラムではありません。申し訳ありませんが、コードは専有であり、投稿することはできません –

+0

.... ABIとは何ですか? –

答えて

1

は、それはコンパイラの問題ですか?それはいくつかの奇妙なコンパイラの最適化のように見えます。

http://codepad.org/ZhYvtj9v でオンラインコンパイラに投稿され、segfaultなしで正しい結果が得られました。

関連する問題