求高手解答,C++中malloc的对象,当调用虚函数时出现段错误

2025-02-27 11:27:41
推荐回答(3个)
回答1:

你好
很高兴为你解答

答案是:
(1)首先你要明白malloc和new的区别,malloc只分配内存,new不仅分配内存,还执行构造函数。
(2)如果一个类中包含了虚函数,那么它的每个对象就有一个虚函数表,用一个指针vptr指向这个虚表,虚表中的每一项指向一个虚函数(你上面的例子只有一个虚函数,所以虚表就一项)
(3)这个虚表的创建是在构造函数中完成的(这个过程我们看不到)。
现在你应该明白了,malloc没有创建虚表,也就没有虚函数的入口,所以执行时就出现指针漂移(你这里表现出来的是段错误),也就是指针的非法访问。
不知道我说的,你看不看的明白。

满意请采纳,谢谢

回答2:

  virtual void display();
  obj_a = (A *)malloc( sizeof(class A) );

malloc不负责触发构造函数,这边的虚函数所需的虚表和虚指针没有初始化。改用new应该就行了。

回答3:

obj_a没有被声明为class A的实例,因此出错。