なぜこのコード行のセグメンテーションフォルトが発生しているのか分かりませんが、アクセスできないメモリ部分にアクセスしようとしているときにエラーが発生することがわかります何が間違っているのか理解する。セグメンテーションフォールトコアがダンプされたC++
私はシーン間で変更しようとしています。ベクトルにオブジェクトをプッシュする関数を置くことによって、セグメンテーションフォールト(コアダンプ)が発生します これは球と平面を押したときに発生します。それが動作しますが、それはもちろん、球をレンダリングしません.. アイデア? 「if文」を削除しても動作します ありがとうございます。
vector < Source * > lightSource;
vector < Object * > sceneObjects;
while (!glfwWindowShouldClose(window)) {
if (firstScene) {
Sphere sphereScene(sphere, .825, green_ref);
Plane planeScene(plane[0][0], plane[0][1], -1, maroon);
Light lightScene(light, whiteLight);
////////////this is what is causing problem i think//////////////////
sceneObjects.push_back(dynamic_cast < Object * > (& sphereScene));
sceneObjects.push_back(dynamic_cast < Object * > (& planeScene));
/////////////////////////////////////////////////////////////////////
lightSource.push_back(dynamic_cast < Source * > (& lightScene));
for (int i = 0; i < 4; i++) {
sceneObjects.push_back(new Triangle(pyramidCoord[i], Blue));
}
for (int i = 0; i < 2; i++) {
sceneObjects.push_back(new Triangle(ceiling[i], White));
}
for (int i = 0; i < 2; i++) {
sceneObjects.push_back(new Triangle(wallG[i], Green));
}
for (int i = 0; i < 2; i++) {
sceneObjects.push_back(new Triangle(wallR[i], Red));
}
for (int i = 0; i < 2; i++) {
sceneObjects.push_back(new Triangle(floor1[i], White));
}
}
にそれは、コードスニペットを読むのは難しいように私の関数の定義がどのように見えるかである - ブレース(複数可)が欠落しているように見えます。インデントが正しい場合、Sphere、Plane、Lightオブジェクトの有効期間はifブロックの後で終了します。しかし、現在未定義のメモリへのポインタは、sceneObjectsリストに格納されており、後でアクセスすることができます(クラッシュする可能性があります)。 Triangleのように新しいものを使ってみませんか? – Anders
良い点私はこのsceneObjects.push_back(新しい球(球、.825、green_ref))に変更しました。sceneObjects.push_back(new Sphere(plane [0] [0]、plane [0] [1]、-1、mroon)); lightSource.push_back(new Light(light、whiteLight));私は別のエラーを取得していませんが、そのセグメンテーションフォルトはもうありません – blank
よろしく!次回は、MVCE(Minimal Complete Verifiable Example)http://stackoverflow.com/help/mcveを投稿して、推測する必要はありません。 – Anders