結構體中的指標&&複製賦值建構函式改造

Labant發表於2024-05-18

帶有成員指標的結構體的複製


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_;
		}
	}

相關文章