我知道這個錯誤來自雙重刪除分配的內存,理論上我知道該怎麼做。但它似乎不應該如此。或者我搞錯了。請幫忙。 這裏是我的類代碼:動態分配的數組,雙重空閒或損壞
typedef int SIZE_TYPE;
template<typename T>
class CArrays{
private:
SIZE_TYPE size;
T * tab;
public:
// methods...
};
template<typename T>
CArrays<T>::CArrays(T value, SIZE_TYPE argsize){
size = argsize;
tab = new T[size];
for(SIZE_TYPE i = 0; i < size; i++)
*(tab+i) = value;
}
template<typename T>
CArrays<T>::~CArrays(){
delete [] tab;
}
template<typename T> template<typename J>
CArrays<T> & CArrays<T>::operator=(const CArrays<J> &rhs){
if(&rhs != this){
this->size = rhs.size;
delete [] this->tab;
this->tab = new T[this->size];
memcpy(this->tab, rhs.tab, sizeof(J) * rhs.size);
}
return *this;
}
當我做我的main.cpp某事像那:
CArrays<int> a(3, 10), b(0, 10);
b = a;
*** glibc detected *** ./out: double free or corruption (fasttop): 0x000000000087b010 ***
你錯過了複製構造函數。 – PaulMcKenzie 2014-11-24 20:29:48
對MCVE進行凝聚並不意味着任意刪除東西。重要的事情,如ctors,dtors,op =和其他任何可能相關的都應該保留。 – Deduplicator 2014-11-24 20:30:22
@PaulMcKenzie:可能,儘管我們不能說。他太多了。 – Deduplicator 2014-11-24 20:32:07