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

饿91

我有一类带有一些基本构造函数的类。主代码

 C1 g = *new C1(2);
 delete &g;

导致错误:

double free or corruption

该代码不等同于

C1 *g = new C1(2);
delete g;

那是什么,我不明白。

西古萨

假设这是C ++,则您的第一个代码段等效于

C1 *p = new C1(2);
C1 g = *p;
delete &g;

p是一个指针,位于堆栈上。
该位置p指向堆上的位置
g是一个C1并且位于堆栈上。
&g(传递给的值delete)因此从堆栈段中的某处返回内存地址。

现在,如果我没有记错的话:
堆栈中的变量是自动分配和取消分配的,所以虽然您delete &g本身并不是导致错误的原因,但触发该功能的是函数结尾处的自动重新分配。
另外,g所指向的值副本p,而不是对其的引用或其他内容。
加号p根本不会释放。

现在,在第二个片段中:

C1 *g = new C1(2);
delete g;

g是一个指针,位于堆栈上。
指向的位置g位于堆上。g(传递给的值delete)因此从堆段中的某处返回一个内存地址,并且每个人都很高兴。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++:双重释放或损坏(输出)

来自分类Dev

Glibc错误:双重释放或损坏

来自分类Dev

Glibc错误:双重释放或损坏

来自分类Dev

双重释放或损坏 C++

来自分类Dev

删除引用时未释放的指针未分配错误

来自分类Dev

C ++双重释放或损坏(输出)错误

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么此C代码产生双重释放或损坏?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

检测到glibc-双重释放或损坏(!prev)

来自分类Dev

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

来自分类Dev

OpenMP *** “...”中的错误:双重释放或损坏(fasttop):[地址] ***

来自分类Dev

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

来自分类Dev

释放iOS应用时删除日志

来自分类Dev

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

来自分类Dev

在C ++中删除向量时遇到双重释放错误

来自分类Dev

删除父引用时删除子对象

来自分类Dev

声明变量为引用时释放后使用堆

来自分类Dev

堆栈和二进制表达式树出现双重释放或损坏错误

来自分类Dev

我的编码器中有双重释放或损坏(快速停止)

来自分类Dev

如何避免副本分配运算符出现双重释放或损坏(快捷方式)?

来自分类Dev

C.双重释放或损坏(!prev)已中止(核心已转储)

Related 相关文章

  1. 1

    C ++:双重释放或损坏(输出)

  2. 2

    Glibc错误:双重释放或损坏

  3. 3

    Glibc错误:双重释放或损坏

  4. 4

    双重释放或损坏 C++

  5. 5

    删除引用时未释放的指针未分配错误

  6. 6

    C ++双重释放或损坏(输出)错误

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

    为什么此C代码产生双重释放或损坏?

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

    检测到glibc-双重释放或损坏(!prev)

  18. 18

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

  19. 19

    OpenMP *** “...”中的错误:双重释放或损坏(fasttop):[地址] ***

  20. 20

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

  21. 21

    释放iOS应用时删除日志

  22. 22

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

  23. 23

    在C ++中删除向量时遇到双重释放错误

  24. 24

    删除父引用时删除子对象

  25. 25

    声明变量为引用时释放后使用堆

  26. 26

    堆栈和二进制表达式树出现双重释放或损坏错误

  27. 27

    我的编码器中有双重释放或损坏(快速停止)

  28. 28

    如何避免副本分配运算符出现双重释放或损坏(快捷方式)?

  29. 29

    C.双重释放或损坏(!prev)已中止(核心已转储)

热门标签

归档