Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szablony reguła trzech zwalnianie pamięci

Ostatnio zmodyfikowano 2014-11-22 11:59
Autor Wiadomość
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 !

P-121141
« 1 »
  Strona 1 z 1