这是我的第一堂课
class Wiersz
{
private:
char *zawartosc;
public:
Wiersz():zawartosc(NULL){}
Wiersz(const char *z)
{
this->zawartosc = new char[strlen(z) + 1];
strcpy_s(this->zawartosc, (strlen(z) + 1) * sizeof(char) , z);
zawartosc[strlen(z) ] = '\0';
}
void usun()
{
delete [] zawartosc;
}
~Wiersz()
{
usun();
}
};
我的结构是第二类
struct El_tekst
{
Wiersz *wiersz;
El_tekst *next;
El_tekst():next(NULL),wiersz(NULL){}
};
是我的第二堂课
class Tekst
{
protected:
El_tekst *tekst;
public:
Tekst(): tekst(NULL){}
~Tekst()
{
El_tekst *_rob;
while(this->tekst != NULL)
{
_rob = this->tekst;
this->tekst = this->tekst->next;
_rob->wiersz->usun();
delete _rob;
}
}
Tekst & operator<<(const char *dod_tekst)
{
if(this->tekst == NULL)
{
this->tekst = new El_tekst();
this->tekst->wiersz = new Wiersz(dod_tekst);
}
else
{
El_tekst *_rob = this->tekst;
while(_rob->next != NULL)
{
_rob = _rob->next;
}
(_rob->next) = new El_tekst();
(_rob->next)->wiersz = new Wiersz(dod_tekst);
}
return *this;
}
};
这是第3课
class Edytor_tekstu : public Tekst
{
private:
int numer_aktualnego_wiersza;
public:
Edytor_tekstu():numer_aktualnego_wiersza(0){}
~Edytor_tekstu(){}
};
现在主要功能:
void main()
{
Edytor_tekstu b;
b<<"ala";
}
有4个字节的哑内存,我哪里弄错了? 可能我会涂上一些什么样的东西,或者我的析构者真的很糟糕。
答案 0 :(得分:1)
而不是使用_rob->wiersz->usun();
使用delete _rob->weirz;
,它也会自动调用usun()。调用第一个删除wiersz包含的一些数据,而不是wiersz本身,它只包含一个4字节指针。如果你包括两行,你将尝试删除wiersz分配两次的内存,这将导致错误。