Error - *** error for object 0x7ffeefbff360: pointer being freed was not allocated.
I understand its better to use vectors, but our prof wants us to use it this way.
My unwrap function is giving me errors where I want to release the memory, also when I want to print the pattern using the for loop in the display function it gives me a garbage value out of memory instead of printing out the pattern itself. I tested using cout in the wrap function and it works there but not in my display function.
bool wrap(Gift& theGift){
    if (theGift.m_wrap == nullptr) {
        cout << "Wrapping gifts..." << endl;
        do {
            cout << "Enter the number of wrapping layers for the Gift: ";
            cin >> theGift.m_wrapLayers;
        }while ((theGift.m_wrapLayers <= 0) && cout << "Layers at minimum must be 1, try again." << endl);
        theGift.m_wrap = new Wrapping[theGift.m_wrapLayers];
        char buffer[100];
        int patternLength;
        for (int i = 0; i < theGift.m_wrapLayers; i++) {
            cout << "Enter wrapping pattern #" << i + 1 << ": ";
            cin >> buffer;
            patternLength = (unsigned)strlen(buffer);
            theGift.m_wrap[i].m_pattern = new char[patternLength + 1];
            theGift.m_wrap[i].m_pattern = buffer;
            cout << theGift.m_wrap[i].m_pattern << endl;
        }
        return true;
    }else {
        cout << "Gift is already wrapped!" << endl;
        return false;
    }
}
bool unwrap(Gift& theGift){
    if (theGift.m_wrap != nullptr) {
        cout << "Gift being unwrapped." << endl;
        for (int i = 0; i < theGift.m_wrapLayers; i++) {
            delete[] theGift.m_wrap[i].m_pattern;
            theGift.m_wrap[i].m_pattern = nullptr;
        }
        delete[] theGift.m_wrap;
        theGift.m_wrap = nullptr;
        return true;
    }else{
        cout << "Gift isn't wrapped! Cannot unwrap." << endl;
        return false;
    }
}
void display(Gift& theGift){
        cout << "Gift Details: " << endl;
        cout << " Description: " << theGift.m_description << endl;
        cout << "       Price: " << theGift.m_price << endl;
        cout << "       Units: " << theGift.m_units << endl;
        cout << "Wrap Layers: " << theGift.m_wrapLayers << endl;
        for (int i = 0 ; i < theGift.m_wrapLayers; i++) {
            cout << "Wrap #" << i + 1 << " ->" << theGift.m_wrap[i].m_pattern << endl;
    }
}
 
    