帶有成員指標的結構體的複製
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_;
}
}