2

我有一堂课:

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

如果我将指针转换为未对齐的值,我可以看到会发生这种情况,但我只是引用一个静态对象。有人会假设访问会正确对齐。

请注意,该类被大大简化了。它包含很多成员变量和方法(不是我的设计!)。

有人对我可能出错的地方或去哪里有任何建议吗?

4

1 回答 1

0

感谢您的输入。事实证明,这个问题的根本原因是分段错误。反汇编表明对齐陷阱指向故障信号处理程序子程序。我正在研究为什么现在会发生这种情况,但我最初提出的问题不再相关。

于 2011-03-24T11:18:01.047 回答