删除引用时的双重自由或损坏
double free or corruption when deleting reference
我有一个带有一些基本构造函数的类。main
中的代码 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
的值)从堆段的某个地方返回一个内存地址,每个人都很高兴。
相关文章:
- 为什么会发生堆损坏
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 平均图像时图像损坏
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 将自由函数绑定为类成员函数
- 为什么C中的通用链表中存储的数据已损坏
- 使用GDB修复大型项目中的双自由或损坏(!prev)错误
- Sqlite3和pthread,双自由或损坏(out)
- 双自由或由矢量引起的损坏
- 双自由或损坏(fasttop):0x000000000063d070***c++sive程序
- c++双自由或损坏(fasttop)--不确定错误在哪里
- C 用向量序列化对象会导致双重自由损坏
- glibc在运行C++代码时检测到*双自由或损坏错误
- 如何避免拷贝赋值操作符的双重自由或损坏(fasttop)
- 双重自由或损坏:c++
- 错误:双重自由或损坏(fasttop) -由析构函数引起,但如何
- c++:双重自由或损坏(fasttop)
- 使用内存复制对象时出现双自由或损坏错误
- 删除引用时的双重自由或损坏
- queue::push后的双重自由或损坏