This is an example to illsratete it :
Code:
#include <iostream>
#include <mylib.h>
#define N 3
class mstr
{
char *str;
public :
mstr(void)
{
str = NULL;
}
void add_new(const char *s)
{
str = new char[strlen(s)+1];
strcpy(str, s);
}
~mstr(void)
{
if ( str )
{
printf("delete %s\n", str);
delete str;
}
}
void show(void)
{
printf("%s\n", str);
}
};
class strt
{
public :
mstr *tbl;
strt(void)
{
tbl = new mstr[N];
tbl[0].add_new("strt :one");
tbl[1].add_new("strt :two");
tbl[2].add_new("strt :three");
}
void disp_tbl(void)
{
for ( int i = 0 ; i < N ; ++i )
tbl[i].show();
}
};
int main(void)
{
strt st1, st2;
int *p = new int[5];
delete p;
st1.disp_tbl();
printf("===> delete []st1.tbl <=== : \n");
delete []st1.tbl;
printf("===> delete st2.tbl <=== : \n");
delete st2.tbl;
return(0);
}
The output is :
strt :one
strt :two
strt :three
===> delete []st1.tbl <=== :
delete strt :three
delete strt :two
delete strt :one
===> delete st2.tbl <=== :
delete strt :one
Abort (core dumped)
I used the debbger and program fails on ending the function mstr::~mstr() after releasing st2.tbl[0].
I fail to
see why.