2016-04-12 4 views
0

ロード時にダイナミックライブラリがクラッシュする以下の設定があります。静的テンプレートメンバーがクラッシュする

// in a.hpp 

template <unsigned int Size> 
class ATemplate : public A 
{ 
public: 
    ATemplate() : A(Size) 
    { 
     init() 
    }; 

    void init() 
    { 
     // does stuff, it crashes here or "before" init() because "this" points to some random memory,... 
    } 
} 

// in b.hpp 

class B 
{ 
public: 
    static const int Size = 128; 
    static ATemplate<Size> Template; 

} 

// in b.cpp 

ATemplate<B::Size> B::Template = ATemplate<B::Size>(); 
// also crashes like this: 
ATemplate<B::Size> B::Template; 

Afaik、AとBの間の継承は、ここでは使用できません。私は静的オブジェクトの初期化の順序について物事を読んだことがありますが、実際には複数の静的オブジェクトを持っていないので、ここでは重要ではないと思います。

ここに問題がありますか?

+0

クラッシュに関するこれ以上の情報はありませんか? – sebap123

+0

ええと、それはアクセス違反です。デバッガから出ることができるのは、関数initがオブジェクトなしで呼び出されるということです。すべての変数はナンセンスであり、「これ」は何も指していません。 –

+1

私は静的な初期化順序の失敗が起きているのだろうか – NathanOliver

答えて

0

EDIT:スタックオーバーフローです。コンパイラが静的なメンバオブジェクトをスタックに置くことを決定する理由を今見つけなければなりません。

関連する問題