Szablony reguła trzech zwalnianie pamięci
Ostatnio zmodyfikowano 2014-11-22 11:59
F4llenone Temat założony przez niniejszego użytkownika |
Szablony reguła trzech zwalnianie pamięci » 2014-11-22 11:59:04 Witam! Próbuję rozwiązać następujący problem już dłuższy czas : _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)); Jest spowodowany najprawdopodobniej niepoprawnym sposobem na zwalnianie pamięci. Używam VS2010 i będę wdzięczny za każdą pomoc. Tutaj jest kilka bloków kodu:
template <typename TYPE> class cSequence { public: unsigned uNmbrOfElements; enum TypeOfElements{cPoint}; TYPE* pElement;
explicit cSequence(unsigned uInNmbrOfElements) : uNmbrOfElements(uInNmbrOfElements),pElement(new TYPE [uNmbrOfElements]) { } explicit cSequence(const cSequence&); // Creator definition in file "cSequence.h"
~cSequence() { delete[] pElement; } cErrorGuard SetElements(unsigned,const TYPE*);
// index operator TYPE& operator[](unsigned uInIndex) { return pElement[uInIndex]; } // assignment operator cSequence& operator=(const cSequence&); };
template <typename TYPE> cSequence<TYPE>::cSequence(const cSequence& cInSequence) { //SETTING MEMBER AND MEMORY ALLOCATION uNmbrOfElements = cInSequence.uNmbrOfElements; pElement = new TYPE[uNmbrOfElements]; //COPYING MEMORY FROM INPUT OBJECT INTO pElement MEMBER memcpy(pElement, cInSequence.pElement, uNmbrOfElements*sizeof(TYPE)); }
template <typename TYPE> cErrorGuard cSequence<TYPE>::SetElements(unsigned uInNmbrOfElements,const TYPE* pInType) { if(uInNmbrOfElements!=uNmbrOfElements) return cErrorGuard(1,typeid(TYPE).name(), "Number of InType elements does not match the allocated memory space for pElement elements"); else { memcpy(pElement, pInType, uNmbrOfElements*sizeof(TYPE)); //COPYING MEMORY FROM INPUT OBJECT INTO pElement MEMBER return cErrorGuard(0,typeid(TYPE).name(), "No item listed"); } }
template <typename TYPE> cSequence<TYPE>& cSequence<TYPE>::operator=(const cSequence<TYPE>& cInSequence) { delete[] pElement; //SETTING MEMBER AND MEMORY ALLOCATION uNmbrOfElements = cInSequence.uNmbrOfElements; pElement = new TYPE[uNmbrOfElements]; //COPYING MEMORY FROM INPUT OBJECT INTO pElement MEMBER memcpy(pElement, cInSequence.pElement, uNmbrOfElements*sizeof(TYPE)); return *this; }
Pozdrawiam Serdecznie !
|
|
« 1 » |