I'm having an issue when debugging my program. I am getting the following error when the destructor is called :0xC0000005: Access violation reading location 0xCCCCCCBC. I assume it is some sort of memory leak issue but I just can't find the culprit. Here is the destructor and the functions that modify the dynamic array:
Contact::~Contact() {
        delete[] phoneNums;
        phoneNums = nullptr;
    }
    Contact::Contact(const Contact& src) {
        phoneNums = nullptr;
        *this = src;
    }
    Contact& Contact::operator=(const Contact& src) {
        if (this != &src) {
            numPhoneNums = src.numPhoneNums;
            strncpy(name, src.name, MAX_CHAR);
            delete[] phoneNums;
            if (src.phoneNums != nullptr) {
                phoneNums = new long long[numPhoneNums];
                for (int i = 0; i < numPhoneNums; i++) {
                    phoneNums[i] = src.phoneNums[i];
                }
            }
            else {
                phoneNums = nullptr;
            }
        }
        return *this;
    }
    Contact& Contact::operator+=(long long newNum) {
        if (getValidPhone(newNum) && !isEmpty()) {
            numPhoneNums++;
            long long* temp = nullptr;
            temp = new long long[numPhoneNums];
            for (int i = 0; i < numPhoneNums - 1; ++i) {
                temp[i] = phoneNums[i];
            }
            temp[numPhoneNums - 1] = newNum;
            delete[] phoneNums;
            phoneNums = nullptr;
            phoneNums = temp;
            }
        return *this;
    }
Contact::Contact() {
    name[0] = '\0';
    phoneNums = nullptr;
    numPhoneNums = 0;
}
int main() {
    cout << "----------------------------------------" << endl;
    cout << "Maximum no of characters in a name: " << sict::MAX_CHAR << endl;
    sict::Contact theContact("John Doe", nullptr, 0); // sict:: intentional
    theContact.display();
    theContact += 14161234567LL;
    theContact += 14162345678LL;
    theContact += 14163456789LL;
    theContact += 114164567890LL;
    theContact.display();
    cout << endl << "Testing! Please wait:" << endl;
    for (int i = 1; i <= 5000000; i++)
    {
        Contact temp = theContact;
        theContact = temp;
        theContact = theContact;
        if (!(i % 10000))
            cout << ".";
        if (!(i % 500000))
            cout << endl;
    }
    cout << endl;
    theContact.display();
    theContact = Contact("", nullptr, 0);
    theContact += 14161230002LL;//program crashes here
    theContact.display();
    system("pause");
    return 0;
}
User contributions licensed under CC BY-SA 3.0