int と多くの bool メンバーを持つ単純なクラス Actor を作成しました。
これは、actor.cpp ファイルからの抜粋です。
Actor::Actor ()
:X(0),Y(0),W(14),H(14),speedX(0),speedY(0)
,left(false),right(false),up(false),North(false),
East(false),South(false),West(false),NorthEast(false),
NorthWest(false),SouthEast(false),SouthWest(false){}
...
これは、actor.h ヘッダー ファイルからのものです。
class Actor
{
private:
int X;
int Y;
unsigned short int W;
unsigned short int H;
unsigned short int speedX;
unsigned short int speedY;
bool left;
bool right;
bool up;
bool North;
bool East;
bool South;
bool West;
bool NorthEast;
bool NorthWest;
bool SouthEast;
bool SouthWest;
public:
Actor();
~Actor();
これはエラーなしでコンパイルされ、
しかし、プログラムを実行すると、最初に奇妙な segfault が発生します。
ここで、初期化リスト内のすべての bool をコメント (//,left(false)) に入れ、gcc にすべてをコンパイルさせると、プログラムは完全に実行されます!
なにが問題ですか?初期化リストを介してすべてのクラスメンバーを初期化する方が良いと思いました。
これは g++ のバグでしょうか?
left(false) の代わりに left() を使用してみました。いいえ: プログラムのどこにも new- または *- 演算子を使用していません!