在我的应用程序中,我使用C ++代码进行编译.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;
};
我对类“ Cache”使用单例模式。
Cache* Cache::getInstance()
{
static Cache* _instance;
// init
if (_instance == NULL)
{
_instance = new Cache();
}
// return the pointer
return _instance;
}
该错误仅由真实电话而不是模拟器抛出。我找到了解决方案,但我不知道是什么原因导致了这个问题。我的意思是它总是出现:
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文件底部的矢量对象,首先编写了函数语句。
换了个位置,一切都OK!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句