Android 致命信号 7 (SIGBUS),代码 1,tid 32190 中的故障地址 0xb8509ce1 (com.example)

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

在我的应用程序中,我使用 C++ 代码 complie.There 是 xxx.cpp 中的一个函数,如下所示:

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):

vector<SREQUEST> m_reqs;

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

我使用单例模式 class "Cache"。

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

     // return the pointer
     return _instance;
}

这个错误只是真正的phone抛出的,不是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"不能工作呢? 没有大的修改怎么解决?

我明白了。

我在xxx.h下面声明了vector对象 file.The首先写了函数语句

交换了位置,一切正常!