当我调用派生类的虚函数时,我遇到了段错误问题。但是,如果我将函数的名称更改为与基类中的虚拟函数的名称不同,则不会发生这些段错误。这是一些代码:
//in main
//initialize scene objects
//camera
if((camera = (Camera*)malloc(sizeof(Camera))) == NULL){
cout << "Could not allocate memory for camera" << endl;
}
//...code in middle
//inside file parsing...
//infile is an ifstream
//nextString is a char*
if(!strcmp(nextString,"camera")){
camera->parse(infile); //segfault here
}
这是基类头文件(.cpp 只在构造函数中实例化变量):
class WorldObj{
public:
WorldObj();
~WorldObj();
virtual void parse(ifstream&) =0;
vec3 loc; //location
};
这是我用来编写虚函数的 Camera 类中的代码:
void Camera::parse(ifstream &infile){
//do parsing stuff
}
parse() 在头文件中声明为 virtual void parse(ifstream&);
我的问题是,如果我将 Camera 中的 parse() 重命名为 CameraParse() 之类的名称,并且完全忽略了要实现的虚函数这一事实,则代码完全可以正常工作!
你能解释一下为什么调用虚函数会导致段错误吗?我检查了 Valgrind 是否有任何内存问题,它告诉我有 8 个字节的无效读/写。我理解这意味着我没有为我的对象正确分配内存,但我不知道分配哪里出错了。
任何帮助,将不胜感激 :)