[解決済み] 場所 0xFFFFFFFFFFFF を読み取るアクセス違反。
2022-02-19 18:21:40
質問
OpenGLを使って、階層型アニメーションのデモをしようとしています。初期段階では、私は私の"bone"オブジェクトに、その親への参照を与えようとしています。
私のボーンクラスでは、正常に親を追加することができますが、問題は私が
hasParent()
. this->parent を読み込むことができず、以下の例外が発生してクラッシュします。
myprogram.exe の 0x00007FF6CB723D43 で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0xFFFFFFFFFFFFFFFFFF.** 。
私のボーン・クラスからのスニペット。
void Bone::addParent(Bone *bone)
{
this->parent = bone;
assert(this->parent);
}
bool Bone::hasParent()
{
assert(this->parent); //this line causes the error
if (this->parent)
return true;
else return false;
}
glm::mat4 Bone::getBoneModel()
{
glm::mat4 parentModel = glm::mat4(1.0);
if (hasParent())
parentModel = parent->getBoneModel();
//boneModel = parentModel * boneModel;
return boneModel;
}
私のメインの内容を削ぎ落としたもの。
#define NUMBONES 3
Bone bone[NUMBONES];
int main( void )
{
//------------------ Create Bones --------------------------
float y = 0.0f;
for (int i = 0; i < NUMBONES; i++)
{
bone[i] = Bone(i, vec3(0, y, -30), vec3(0, 0, 0), vec3(0, 0, 0));
y += 5.0f;
}
//----------------- Make relationships ----------------
bone[0].isRoot = true;
bone[0].addChild(&bone[1]);
bone[0].addChild(&bone[2]);
bone[1].addParent(&bone[0]);
bone[1].addChild(&bone[2]);
bone[2].addParent(&bone[1]);
do{
ModelMatrix = bone[1].getBoneModel();
}
return 0;
}
私はリファレンスとポインターを理解するのが難しいと思うので、他の誰かにとっては当たり前のことなのだと思います
EDIT
私のコンストラクタ
Bone::Bone() {
parent = NULL;
child = NULL;
boneID = 0;
boneModel = glm::mat4(1.0);
}
Bone::Bone(int ID, glm::vec3 T, glm::vec3 R, glm::vec3 S)
{
boneID = ID;
isRoot = false;
pos = T;
//---------- set boneModel ------------------
glm::mat4 RotationMatrix = glm::mat4(1.0);
glm::mat4 TranslationMatrix = translate(glm::mat4(), pos);
glm::mat4 ScalingMatrix = scale(glm::mat4(), glm::vec3(1.0f, 1.0f, 1.0f));
boneModel = TranslationMatrix * RotationMatrix * ScalingMatrix;
std::cout << "bone[" << boneID << "] created.\n";
}
解決方法は?
追加
parent = NULL;
child = NULL;
を第2コンストラクタへ
Bone(int ID, glm::vec3 T, glm::vec3 R, glm::vec3 S)
関連
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] 0xC0000005: アクセス違反(場所 0x00000000 の読み込み
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】C++の余分な資格エラー
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み】"static const" vs "#define" vs "enum"