作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个具有多个虚函数的结构对象
对象.h
struct object {
public:
...
virtual float intersect(Point, Vector, object*, Point*);
virtual Vector normal(Point, object*);
};
并且它们在另一个名为 sphere 的结构中实现
球体.h
struct sphere: public object {
...
// intersect ray with sphere
float intersect(Point, Vector, object*, Point*) override;
// return the unit normal at a point on sphere
Vector normal(Point, object*) override;
};
我创建并存储指向 vector 中球体的指针,通过
extern vector<object*> scene;
sphere *new_sphere;
new_sphere = (sphere *) malloc(sizeof(sphere));
...
scene.push_back(new_sphere);
所以当我尝试使用以下代码调用 intersect 时会出现问题
extern std::vector<object*> scene;
...
object *intersect_scene(Point p, Vector u, Point *intersect, int ignore) {
for (vector<object*>::iterator it = scene.begin(); it != scene.end(); ++it) {
float intersect_point = (*it)->intersect(p, u, *it, &temp_hit);
}
我从 gdb 得到以下错误
Program received signal SIGSEGV, Segmentation fault.
0x00000000004042ef in intersect_scene (p=..., u=..., intersect=0x7fffffffdcd0,
ignore=-1) at trace.cpp:70
70 float intersect_point = (*it)->intersect(p, u, *it, &temp_hit);
有人可以告诉我这里发生了什么吗?
根据要求:
struct Point{
float x;
float y;
float z;
};
struct Vector{
float x;
float y;
float z;
};
最佳答案
不要使用malloc
来构造非POD 对象。请改用 new
。
malloc
所做的只是分配字节——它不构造对象。您的 sphere
对象具有虚函数,派生自基类等。这些类型必须正确构造,而 malloc 不会完成这项工作。
此外,如果您调用了free()
,它们也必须更改为调用delete
。
就对象构造而言,唯一使用 malloc
的情况是您正在使用 placement-new
,而您的代码并未这样做。
关于c++ - 未调用覆盖的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27162314/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!