type
status
category
date
slug
summary
tags
icon
Last edited time
May 21, 2023 07:57 AM
分析详解
1、 在main中执行Teacher t1(1,”edh”);之后,
栈中开辟了一个T1存放了id:1和一个指针char* name
在堆中开辟了一个空间,存放了"edh", 并且让指针指向了这块区域

仅执行
Teacher t1(1,"edh")
执行截图
2、在main中执行了
Teacher t2(t1);
之后,调用了默认的拷贝构造函数
在栈中再开辟了T2,存放了和T1一样的id和指针
且指针指向同一个堆内区域"edh"

3、当test()函数执行完毕之后,后构造T2先被析构
此时T2的name指针指向了NULL,堆中堆"edh"已经被释放了
接着析构T1的时候,析构函数再次想要析构name指针,访问非法空间,报段错误,程序崩溃

程序崩溃错误

4 解决方法:显示的提供一个拷贝构造函数,来完成深拷贝动作

之后析构的时候,各自释放各自的堆空间,互不影响

源代码
- 作者:Jimmy Huang
- 链接:https://huangjihao.com/3d7c1e81-6a55-4c3c-9b81-017f277f1614
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。