私のアプリでは、私は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"の原因は何ですか? 大きな修正なしでそれを修正する方法は?