일단. 소스를 보스겠습니다(음)

#include <Turboc.h> //이건 winapi.co.kr 에 있는 그 헤더파일입니다. 안에 stdio.h stdlib.h 등 기본적인 것이 인클루드 되어 있지요

#include <iostream>
using namespace std;

#define NOTYPE int
class DArr {
        NOTYPE *Dpa;

        unsigned Num;        //배열의 숫자를 저장하고 있는 변수.
        unsigned Size;        //배열의 크기
public:
        DArr(unsigned asize = 100);
        ~DArr();
        void Insert(int idx, NOTYPE data);
        void Delete(int idx);
        void Append(NOTYPE data);

        void ShowData();

};

DArr::DArr(unsigned asize)
{
        Size = asize;
        Num = asize;                                                                                // 생성하자마자 Num 변수에는 배열전체 개수가 저장된다.
        Dpa = (NOTYPE *)malloc(Size * sizeof(NOTYPE));  // 동적 배열을 생성한다.
        for(int i =0; i<Size ; i++)
        {
                *(Dpa+i) = i;
        }
}

void DArr::Insert(int idx, NOTYPE data)                                        // idx번째 자리에 data를 집어 넣는 함수.
{
        unsigned Need;
        Need = Num+1;

        if ( Need > Size )                                                                // 사용자가 요구하는 배열 크기 > 현재 배열의 크기.
        {
                Dpa = (NOTYPE *)realloc(Dpa, (Size+1) * sizeof(NOTYPE));
                Num = Size+1;
        } //배열의 크기가 부족하면 그 배열의 개수를 10개 중가시킨다. Num에는 현재의 Size가 들어간다.
        
        memmove(Dpa+idx+1, Dpa+idx, (Num-idx)*sizeof(NOTYPE)); //메모리를 복사한다.
        *(Dpa+idx) = data;                                                                         //데이타를 집어 넣는다.
}
void DArr::Delete(int idx)
{
        memmove(Dpa+idx, Dpa+idx, (Num-idx)*sizeof(NOTYPE));  //배열을 삭제한다
}

void DArr::Append(NOTYPE data)
{
        Insert(Num, data);
}

void DArr::ShowData()
{
        for (int i=0 ; i<Num ; i++)
        {
                cout << *(Dpa+i) << endl;
        }
        cout << Dpa << endl;
}

DArr::~DArr()  //파괴자는 배열을 자동적으로 파괴시킨다.
{
        cout << Dpa << endl;
        free(Dpa);
        cout << "파괴자가 호출되었습니다." << endl;
}

void main()
{
        DArr a(10);
        a.Insert(4, 20);
        a.ShowData();
        
}


어디서 에러가 나는지는 찾았습니다. 바로 소멸자가 free(Dpa)를 하는 순간이더군요.
양 사이드로 cout을 해보니 한번만 뜨기 때문에 알수 있었는데요..

에러의 이유를 영 모르겠습니다. 조금 복잡한 소스이지만, 고수분들의 답변 부탁드립니다.
객체지향 이거 너무 재밌어요. ...에러만 안난다면-_-;