类破坏时的内存损坏(双重释放)

穆罕默德·贾法尔(Mohamad-Jaafar)

谁能解释一下这种情况:为什么我在这个简单的代码中面临“双重自由”的问题?

void Rreceive (myclass){}

int main () {
    myclass msg (1);
    Rreceive(msg);
    return 0;
}

在哪里myclass

class myclass
{
    private:
        HeaderType header;
        byte * text;    

    public:
        myclass(int ID);
        ~myclass();
        HeaderType getHeader();
        byte * getText();
};

myclass::myclass(int ID){
    header.mID = ID;
    text = (byte *)malloc (10);
    memset (text, '.', 10);
}

myclass::~myclass(){
    free (text);
}

HeaderType myclass::getHeader(){
    return header;
}

byte * myclass::getText(){
    return text;
}

和HeaderType是:

typedef struct {
    int mID;
}HeaderType;

错误是: *** glibc detected *** ./test: double free or corruption (fasttop): 0x0868f008 ***...

迈克尔·CMS

当您输入Rreceive函数时,您将调用默认的复制构造函数,该构造函数不会对您的文本指针进行深层复制(换句话说,他只会将指针分配给新副本)。

退出Rreceive范围时,您可以从复制的实例中释放(文本),该实例将指向相同的内存地址。

退出主要功能范围时,您将尝试再次释放相同的内存地址。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

函数随机工作,覆盖内存,双重释放,损坏(!prev)

当一个类的所有实例都被破坏时释放内存

使用memcpy复制对象时出现双重释放或损坏错误

双重释放或共享指针损坏

双重释放或损坏 C++

Glibc错误:双重释放或损坏

C ++双重释放或损坏,当我认为我只释放一次时出错

调用 free 时出错:双重释放或损坏、损坏的大小与 prev_size、接收到的信号 6

实例被破坏时,为什么tkinter不释放内存?

我的破坏函数有双重释放

函数内部出现“双重释放或损坏”错误?

pthreads“双重释放或损坏(输出)”错误

数据结构中的双重释放或损坏

错误:双重释放或损坏(快速更新)

删除引用时双重释放或损坏

星号:双重释放或损坏(快速更新)

sbt-每当运行摩卡测试时都会出现双重释放或损坏(!prev)错误

使用旧的glibc和libstdc ++库版本时出现“双重释放或损坏”

调用httr :: oauth_service_token()时发生严重崩溃-双重释放或损坏(fasttop)

执行free()时出错,并显示“ glibc检测到双重释放或损坏”

在递归函数中调用函数时出现“双重释放或损坏”错误

仅在删除链接列表的第一个节点时才接收“双重释放或损坏”

释放内存时出错

池破坏后未释放APR内存

使用calloc和更改的stdout释放内存时检测到堆损坏

带有OpenMP的MxCalloc和MxFree导致双重释放或损坏

无法找出双重释放或损坏(快速停止)错误

双重释放或损坏 (fasttop) 错误 c/c++ linux

C ++找不到错误,双重释放或损坏(fasttop)