- 论坛徽章:
- 0
|
编译器为 g++ version is g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)
我的程序如下:-
- #include <iostream>
- using namespace std;
- class Handle{
- public:
- Handle(int *p, int u):_p(p),use(u){}
- ~Handle(){cout << "delete" << endl; delete _p;}
- void display(){cout << "value : " << *_p << ", use : " << use << endl;}
- private:
- int *_p;
- int use;
- };
- int main()
- {
- //Test case one
- {
- int *i = new int(10);
- Handle *h = new Handle(i, 2);
- Handle *h1 = new Handle(i, 100);
- h->display();
- h1->display();
- delete h;
- delete h1;
- //调用了两次析构函数,应该delete了指针i指向的内存两次,但是不报错double free
- }
- //Test case two
- {
- int *a = new int(11);
- Handle h2(a, 23);
- Handle h3(a, 33);
- h2.display();
- h3.display();
- //这里就会报double free
- }
- cout << "ok" << endl;
- return 0;
- }
复制代码 case two 报错我明白,但是为什么case one不报错?? |
|