응용 프로그램이 힙 끝 뒤에서 메모리에 쓴 것으로 "디버그 오류"CRT가 발생했습니다. 그러나 나는 왜 그런지 이해하지 못하고 어떤 비슷한 예도 찾을 수 없다.힙 버퍼 (새/삭제) 클래스 끝에서 응용 프로그램이 메모리에 썼음을 감지했습니다.
전체 코드는 ... 하지만 메인과 관련된 문제 일 수 있습니다.
#include <iostream>
#include <cmath>
#include <array>
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;
}
관련없는 (아마도) 나는 ShapePointer의 필요성을 알지 못합니다. Shape * ShapeArray [2] = {새로운 직사각형 (...), 새로운 직사각형 (...)}' –
과 같이'Shape'에 대한 일반적인 포인터 배열을 가지고 있습니다. 발행물. – Toby
더 많은 질문과 관련하여 디버거에서 실행할 수 없으며 프로그램을 실행할 때 오류를 잡을 수 있습니까? 그런 다음 코드에서 어디에서 발생하는지 찾을 수 있어야합니다. 또는 최소한 디버그 로깅을 추가하여 범위를 좁히는 데 도움이됩니까? –