销毁后为什么不提示"double free"
Why not prompt "double free" after destructing
我尝试测试" double free "复制构造后(AutoPtr<A> p_b = p_a
附近),但 ./a.out不提示它。
#include <iostream>
using namespace std;
class A {
public:
A(int i = 0) { cout << "A construct:" << this << endl; }
~A() { cout << "A destruct:" << this << endl; }
void print() { cout << n << endl; }
int n;
};
template<typename T>
class AutoPtr {
public:
AutoPtr(T *p= NULL): ptr(p) {}
~AutoPtr() {
cout << "AutoPtr destruct: " << ptr << endl;
delete ptr;
}
T &operator*(void) const {
return *ptr;
}
T *operator->(void) const {
return &**this;
}
private:
T *ptr;
};
int main(void)
{
AutoPtr<A> p_a(new A(0));
++p_a->n;
p_a->print();
AutoPtr<A> p_b = p_a;
++p_b->n;
p_b->print();
return 0;
}
终端输出:
$ ./a.out
A construct:0x781b68
1
2
AutoPtr destruct: 0x781b68
A destruct:0x781b68
AutoPtr destruct: 0x781b68
A destruct:0x781b68
我的GCC版本8.2.1
通过指向有效对象的指针删除的行为(例如,使用new
分配的另一个删除无效的指针是无效的)。
无法保证其行为不确定的程序会"提示"任何内容。
相关文章:
- C++在数学计算中将double转换为int
- 在c++中为double类型的数组创建一个unique_ptr
- 逻辑'double free or corruption (fasttop)'错误
- emplace_back和push_back给出错误'double free or corruption (fasttop)'尽管定义了复制和移动构造函数
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- 二叉树中shared_ptr "double free or corruption"
- 销毁后为什么不提示"double free"
- "double free or curruption " C++ 中的错误
- 我在C++中使用删除运算符时遇到问题。我在运行时不断收到"double free or corruption (fasttop)"错误
- Double free() or corruption:C++
- 重新排列代码行时未引发错误"Double free or corruption"
- 运行时错误:"*** glibc detected ***: double free or corruption (out)"
- 实现动态数组数据结构时出现"double free or corruption"错误
- 与"glibc detected: vector double free or corruption (out)"崩溃
- 显式调用析构函数时的 C++ 内存错误 ("double free or corruption"
- 为什么我会"double free or corruption"?
- C++:全局外部变量"double free or corruption"?
- 为什么两个程序中的一个会导致错误"*** glibc detected *** double free or corruption"而另一个则不会导致错误?
- 了解错误'double free or corruption'