2011-09-26 5 views
1

これを実行するセグメンテーションフォルトがなぜ発生するのか教えてください。私は、オブジェクトの配列の配列へのポインタを試して、どのように私はこの問題を解決することができますか? sf :: Vector2クラスの宣言は、ここにあります:http://www.sfml-dev.org/documentation/1.6/classsf_1_1Vector2.phpポインタを使用してオブジェクトの配列の配列にインデックスを付けるときのセグメンテーションフォルト

多くのありがとう。

#include <SFML/System/Vector2.hpp> 
#include <iostream> 
class Tet 
{ 
    public: 
     Tet(); 
    private: 
     static sf::Vector2 <int> I[4]; 
     static sf::Vector2 <int> J[4]; 
     static sf::Vector2 <int> *types[2]; 

}; 

sf::Vector2 <int> Tet::I[4] = {sf::Vector2 <int>(0,1), 
           sf::Vector2 <int>(1,1), 
           sf::Vector2 <int>(2,1), 
           sf::Vector2 <int>(3,1)}; 

sf::Vector2 <int> Tet::J[4] = {sf::Vector2 <int>(1,1), 
           sf::Vector2 <int>(2,1), 
           sf::Vector2 <int>(3,1), 
           sf::Vector2 <int>(3,2)}; 

sf::Vector2 <int>* Tet::types[2] = { I,J };         

Tet::Tet() 
{ 
    //trying to print out x member of first vector of I 
    std::cout << (*(*(types))).x << std::endl; 
} 

main() 
{ 
    Tet t = Tet(); 
} 

EDIT:G ++コンパイラ

+0

で初期化し、それはどのように実装されていますか?コードを見てみると、うまくいくはずです。 sf :: Vector2にアクセスすることができなければ、誰もこれを実行して試してみることができないため、これをより広く利用できる型で再現できますか? – Chad

+1

期待通り、単純な例(sf :: Vector2の代わりにをcharに置き換えて)がうまくいくようです。 – Chad

+0

これはここに定義されていますhttp://www.sfml-dev.org/documentation/1.6/Vector2_8hpp_source.php – aultbot

答えて

1

あなたが参照しているtypes配列を割り当てていないか、インスタンス化しません。 typesは、具体的な値をnullptrに割り当てることができないポインタです。現時点でどのように残しましたか?

ちょうどあなたがVector2オブジェクト、Matrixオブジェクトを持っていることによって、おそらく単純で、より効果的な設計を検討したい、その後、コレクションを持ってTetオブジェクトも代わりにポインタ sf::Vector2<int> types[2][4];

の配列として宣言好ましくはSTLコンテナおよびアルゴリズムを使用する行列の行列である。

+0

ありがとうございます。私は型配列のインデックスを作成し、擬似乱数ジェネレータによって返されたインデックス値(0または1)に応じてIまたはJのいずれかを返すことができるようにしたいと考えていました。 – aultbot

+0

おそらく、メモリ管理について心配する必要はありません。 – AJG85

+0

私はsf :: Vector2の2D配列を宣言できたと思います。代わりにsf :: Vector2のように [2] [4] – aultbot

1

多分最初のタイプを割り当て、SF ::ベクトル2で何{& I、J &}

関連する問題