我有一个班级:
class A {
public:
static A& instance();
...
void setValue(int val){ _value = val; }
private:
int _value;
}
A& A::instance(){
static A _Instance;
return _Instance;
}
我在ARM处理器上运行它。我遇到的问题是,当我从特定类(比如B类)调用instance()方法时,应用程序正在触发内核中的对齐陷阱。如果我从其他任何地方调用instance(),我都不会遇到对齐陷阱。
对齐陷阱:未在[< 0001b588>]处理指令e28fc609
我可以看到如果我将指针指向错误对齐的值,会发生这种情况,但我只是引用一个静态对象。人们会认为访问将正确对齐。
请注意,课程大大简化了。它包含 lot 的成员变量和方法(不是我的设计!)。
有没有人对我可能出错的地方或在哪里看?
答案 0 :(得分:0)
感谢投票人员。事实证明,这个问题的根本原因是分段错误。反汇编表明,对齐陷阱指向故障信号处理程序子程序。我正在调查为什么会发生这种情况,但我最初提出的问题已经不再适用了。