java清空程序运行的缓存_CRT检测到应用程序在堆缓冲区(新/删除)类结束后写入内存...

博客内容涉及一个C++程序,该程序在基类`Shape`和派生类`Shape2D`、`Rectangle`中定义。程序在运行过程中遇到了`CRT检测到应用程序在堆结束后写入内存`的调试错误。错误可能源于对象生命周期管理问题,如不当的内存分配和释放。文章讨论了如何使用智能指针或改进内存管理来避免此类问题。
摘要由CSDN通过智能技术生成

我收到“调试错误”CRT检测到应用程序在堆结束后写入内存 . 但我不明白为什么,也找不到任何类似的例子 .

完整的代码是......虽然我认为这可能只是主要问题 .

#include

#include

#include

using namespace std;

// Declare global consts

const double pi = 3.1415926583;

// Base class Shape

class Shape{

protected:

double *sides;

public:

Shape(const int n){ //parameterized for n dimensional shape

sides = new double[n];

}

// need virtual destructor

virtual ~Shape(){

delete[] sides;

}

virtual double area() const = 0; // pure virtual function for area

virtual double volume() const = 0; // pure virtual function for volume

};

//

//Derived classes for 2D and 3D Shapes

class Shape2D : public Shape{ // inherit shape

protected:

int n = 2; //n denotes the number of dimensions

public:

// default constructor

Shape2D() :Shape(n){}

// param constructor

Shape2D(const double side1, const double side2) :Shape(n){

sides[0] = side1; sides[1] = side2;

}

virtual ~Shape2D(){} //virtual destructor

double volume() const { cout << "trying to calculate volume of 2d shape..." << endl; return 0; };

};

/

//2D shapes

class Rectangle : public Shape2D{

public:

// constructors

Rectangle() :Shape2D() {}

Rectangle(const double side1, const double side2) :Shape2D(side1, side2){}

~Rectangle(){}

double area() const { return (sides[0] * sides[1]); }

};

int main(){

Shape **ShapePointer = new Shape*[2];

ShapePointer[0] = new Rectangle(2, 5);

ShapePointer[1] = new Rectangle(1, 3);

// clean up

delete ShapePointer[0];

delete ShapePointer[1];

delete[] ShapePointer;

system("pause");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值