【发布时间】:2016-07-12 20:39:11
【问题描述】:
不知道为什么我在这段特定的代码行中遇到分段错误,我知道当您尝试访问您无权访问的内存部分时会遇到该错误,但我不知道出了什么问题.
我正在尝试在场景之间进行更改,并且通过将推动对象的函数放入向量中,我得到了分段错误(核心转储) ,这仅在我推动球体和平面时发生,当我将这两条线注释掉时它可以工作,但它当然不会渲染球体.. 有任何想法吗? 如果我删除“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));
}
}
【问题讨论】:
-
sn-p 代码很难阅读 - 似乎缺少大括号。如果缩进正确,则 Sphere、Plane 和 Light 对象的生命周期在 if 块之后结束。但是指向现在未定义内存的悬空指针存储在 sceneObjects 列表中,以后可能会被访问(并崩溃)。为什么不使用新的三角形?
-
好点我把它改成了这个场景Objects.push_back(new Sphere(sphere,.825,green_ref)); sceneObjects.push_back(new Sphere(plane[0][0],plane[0][1], -1, m aroon)); lightSource.push_back(new Light(light,whiteLight));不是我得到不同的错误,但它不再是分段错误
-
耶!下次发布一个最小完整可验证示例 (MVCE) stackoverflow.com/help/mcve 很重要,所以我们不必猜测。现在,继续你的下一个问题;-)
标签: c++ vector segmentation-fault