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首先写了函数语句
交换了位置,一切正常!
在我的应用程序中,我使用 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首先写了函数语句
交换了位置,一切正常!