2016-04-11 16 views
1

私のアプリでは、私はcomplie.Thereにxxx.cppの関数があります:Androidの致命的なシグナル7(SIGBUS)、コード1、tidの32190(com.example)のエラーaddr 0xb8509ce1

void Cache::addRequest(SREQUEST req) 
{ 
    m_reqs.push_back(req); 
} 

私のアプリは、この関数を呼び出すと、それは実行時エラーをスローします:

Fatal signal 7 (SIGBUS), code 1, fault addr 0xb8509ce1 in tid 32190 (com.example) 

属性「m_reqsは、」ヘッドファイル(xxx.h)にdeclearedベクトルオブジェクト、次のとおりです。

vector<SREQUEST> m_reqs; 

struct SREQUEST 
{ 
    SREQUEST() 
    { 
     code = ""; 
     oldLen = 0; 
    } 
    TimeRound tr;   // enum(int type) 
    std::string code; 
    int oldLen; 
}; 

私はクラス "キャッシュ"でシングルトンモードを使用します。

Cache* Cache::getInstance() 
{ 
    static Cache* _instance; 
    // init 
    if (_instance == NULL) 
    { 
     _instance = new Cache(); 
    } 

    // return the pointer 
    return _instance; 
} 

エラーが唯一の本当の電話でthrowedされ、simulator.Iは解決策を見つけていないが、私はこのquestion.Iは、それが常に表示されています意味原因かわからなかった。

SREQUEST req; 
req.code = "123"; 
req.tr = 1; 
req.oldLen = 0; 
Cache::getInstance()->addRequest(req); // cause error 

私が修正それは好きです:

typedef vector<SREQUEST> VEC_SREQUEST; 
VEC_SREQUEST* Cache::getVector() 
{ 
    if(v_reqs == 0)  // int type 
    { 
     vector<SREQUEST>* TEMP = new vector<SREQUEST>(); 
     void* x = (void*)TEMP; 
     v_reqs = (int)x; 
    } 
    void* temp = (void*)v_reqs; 
    VEC_SREQUEST* res = ((VEC_SREQUEST*)temp); 
    return res; 
} 

void Cache::addRequest(SREQUEST req) 
{ 
    VEC_SREQUEST* vec = getVector(); 
    vec->push_back(req); 
} 

私のcppでは、私はコード "xxx.push_back(something)"を広く使用しています。このソリューションは、多くの時間を必要とするジョブを使用します。

"xxx.push_back"の原因は何ですか? 大きな修正なしでそれを修正する方法は?

答えて

0

私は理由がある。

私は、xxx.hファイルの最後にベクターオブジェクトをデクリールします。関数のステートメントは最初に書き換えられます。

交換された、すべてが大丈夫です!

関連する問題