ahapeach 2021-02-03 16:27 采纳率: 50%
浏览 839
已采纳

vs2019中程序运行出错:未加载wntdll.pdb

一个简单小程序运行出错,好像是delete d处发生了问题,不明白为什么,麻烦大佬们瞅一瞅

#include<iostream>
using namespace std;
#include<string>
//抽象类
class CPU
{
public:
	virtual void calculate() = 0;
};
class Display
{
public:
	virtual void disp() = 0;
};

//子类继承并重写抽象方法
class Inter :public CPU, public Display
{
public:
	void calculate()
	{
		cout << "Inter牌CPU正在计算" << endl;
	}
	void disp()
	{
		cout << "Inter牌显卡正在工作" << endl;
	}
};

class Lenovo :public CPU, public Display
{
public:
	void calculate()
	{
		cout << "Lenovo牌CPU正在计算" << endl;
	}
	void disp()
	{
		cout << "Lenovo牌显卡正在工作" << endl;
	}
};

class computer
{
public:
	void show(CPU* c, Display* d)
	{
		c->calculate();
		d->disp();
		
		if (c != NULL)//这里都可以释放内存
		{
			delete c;
			c = NULL;
		}
		if (d != NULL)//这里判断了d不为空指针
		{
			delete d;//好像是这里程序崩了,为啥不能释放啊????
			d = NULL;
		}
	}
};
int main()
{
	computer c;
	c.show(new Lenovo, new Inter);
}

谢谢大家!!!

  • 写回答

2条回答 默认 最新

  • wlj1234 2021-02-08 10:08
    关注

    这是因为你的函数void show(CPU* c, Display* d);而不是void show(Lenovo* c, Inter* d);

    无虚析构函数的时候系统会认为你释放的是CPU对象内存而不是Lenovo对象,无法正确释放内存

    有虚析构函数的存在,在释放内存时虚表中的信息找到实际对象(Lenovo)所在的内存块进行释放

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?