【问题标题】:Can you find 4 bytes of memory leaks in this code? [closed]你能在这段代码中找到 4 个字节的内存泄漏吗? [关闭]
【发布时间】:2014-02-18 21:34:28
【问题描述】:

这是我的第一堂课

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;
        }
    };

这是第三课

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 个字节的哑内存,我哪里出错了? 可能我分配了一些不应该的东西,或者我的析构函数真的很糟糕。

【问题讨论】:

  • 不,我不能。但 Valgrind 可以。

标签: c++ memory-leaks byte destructor


【解决方案1】:

而不是使用_rob-&gt;wiersz-&gt;usun(); 使用delete _rob-&gt;weirz;,它也会自动调用usun()。调用第一个会删除 wiersz 包含的一些数据,但不会删除 wiersz 本身,它只包含一个 4 字节指针。如果您包含这两行,您将尝试删除 wiersz 分配两次的内存,这会导致错误。

【讨论】:

  • 现在可以了,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多