结构体中的指针&&拷贝赋值构造函数改造

带有成员指针的结构体的拷贝


1.问题

 使用结构体时,在析构时发生了**重复释放指针** 的错误。

2.原因

定义了QList<结构体>,使用append添加结构体对象并未此结构体中的指针分配了空间,append会执行值拷贝,此时会创建新的副本添加进QList中,值得注意的是:append执行拷贝时并不会分配地址,而是把副本中的指针指向原值指向的地址,因此在脱离变量析构时,原值中指针已被释放,副值再次释放时便会造成二次释放的错误。

3.解决方法

已经定位到原因是拷贝构造副值时,并不会为副值中的指针分配地址,故解决方法就是改造拷贝构造函数。
	struct struct_A{
	char* ptr_ = nullptr;
	int size = 0;
		//拷贝构造
		struct_A(struct_A& it){
			//拷贝指针长度
			this->size = it.size;
			//分配空间
			this->ptr_ = (char*)malloc(this->size);
			//拷贝指针数据
			*this->ptr_ = *it.ptr_;
		}
	}
posted @ 2024-05-18 17:54  Labant  阅读(136)  评论(0)    收藏  举报