0

我正在做一个 opengl 项目,但我的一些课程有问题:

主要有3个类:


class scene{
public:
   scene();
   object** elements;
   unsigned int nb_elements;

   void add_object(object* _element){
       objet** p_elements=elements;

       while(p_elements-elements!=nb_elements)
           p_elements++;

      *p_elements=_element;                    //here is the bug
      nb_elements++;
    }


}
[...]
};

class object{
public:
    object();
    [...]
};

class point : public object{
point();
point(double _x, double _y, double _z,double _r);
[...]
}

我在初始化 Opengl 后初始化场景,在同一个函数中:

void GLWidget::initializeGL(){

   [OpenGL initialization]

   _scene=new scene;
   point* s1=new point(0.0,0.0,3.0,1.0);
   _scene->add_object(s1);

}

该错误在 scene::add_object 函数中。我不明白为什么它不起作用,因为 *p_elements 和 _element 都是指针。我猜这是演员阵容问题,但我不知道如何解决。我尝试了动态转换:错误仍然存​​在。

感谢您的帮助,

卡茅斯

4

1 回答 1

2

objet** p_elements=elements;设置p_elements为未初始化的内存。所以p_elements-elements!=nb_elementsp_elements++;*p_elements=_element;调用未定义的行为。我不建议您初始化内存,而只是使用std::vector智能指针代替。

双指针建议你来自 C 背景,但如果你想做 C++ 开发,你必须学习 C++ 习语。不要坚持用 C++ 编写 C 代码。

于 2012-10-09T16:07:44.763 回答