私はC++にかなり慣れていないので、次のようなコードでポインタを割り当てるとセグメンテーション違反が発生し続けます。割り当てられていないメモリにアクセスしていることを意味しますが、どこにあるのかわかりません。
私には2つのクラスがあります:
class ClassA{ //class a decl.
ClassB** oArray;
unsigned int x;
public:
ClassA(unsigned int X);
void oMember(ClassB* classb);
}
ClassA::ClassA(unsigned int X){ //Constructor for class a
x = X;
oArray = new ClassB* [x];
for (unsigned int i = 0; i < x; i++){
oArray = NULL;
}
}
class ClassB{ //rough decl of class B
public:
getId();
}
次のような別のクラスへのポインタを受け取るクラスメンバー関数があります。
void ClassA::oMember(ClassB* classb){
unsigned int cID = classb.getId(); //defined in class b
oArray[cID] = classb; //if cID is less than x defined in constructor, is this legal?
}
配列のcID番目のメンバーをclassbにポイントしたいだけです。
上記のような割り当てでセグメンテーション違反が発生し続けます。理由はよくわかりません。cIDを出力しましたが、ClassAのコンストラクターで宣言した配列のサイズよりも間違いなく小さくなっています。
その割り当てが違法であるのはなぜですか、またはセグメンテーション違反が発生しているのはなぜですか?