Что может быть неверным в моем коде, который я получаю: PhoneBook.exe вызвал точку останова. произошло - PullRequest
0 голосов
/ 09 мая 2019

Я хотел бы создать простое консольное приложение для телефонной книги на С ++. Я не могу использовать контейнеры stl (vector, list, ...), поэтому я должен написать все. Вот репозиторий Git: Телефонная книга

Person.cpp

#include "pch.h"
#include "Person.h"
#include <stdio.h>

using namespace std;

char* stringcpy(char* destination, const char* source)
{
    for (int i = 0; source[i] != '\0'; i++)
    {
        destination[i] = source[i];
        destination[i + 1] = '\0';
    }
    return destination;
}

Person::Person()
{
    firstName = nullptr;
    lastName = nullptr;
    nickName = nullptr;
    address = nullptr;
    workPhone = nullptr;
    privatePhone = nullptr;
}

Person::Person(const char* pFirstName, const char* pLastName, const char* pNickName, const char* pAddress, const char* pWorkPhone, const char* pPrivatePhone)
{
    firstName = new char[strlen(pFirstName) + 1];
    lastName = new char[strlen(pLastName) + 1];
    nickName = new char[strlen(pNickName) + 1];
    address = new char[strlen(pAddress) + 1];
    workPhone = new char[strlen(pWorkPhone) + 1];
    privatePhone = new char[strlen(pPrivatePhone) + 1];

    stringcpy(firstName, pFirstName);
    stringcpy(lastName, pLastName);
    stringcpy(nickName, pNickName);
    stringcpy(address, pAddress);
    stringcpy(workPhone, pWorkPhone);
    stringcpy(privatePhone, pPrivatePhone);


}

Person::Person(Person & p)
{
    delete[] firstName;
    delete[] lastName;
    delete[] nickName;
    delete[] address;
    delete[] workPhone;
    delete[] privatePhone;

    firstName = new char[strlen(p.firstName) + 1];
    lastName = new char[strlen(p.lastName) + 1];
    nickName = new char[strlen(p.nickName) + 1];
    address = new char[strlen(p.address) + 1];
    workPhone = new char[strlen(p.workPhone) + 1];
    privatePhone = new char[strlen(p.privatePhone) + 1];

    stringcpy(firstName, p.firstName);
    stringcpy(lastName, p.lastName);
    stringcpy(nickName, p.nickName);
    stringcpy(address, p.address);
    stringcpy(workPhone, p.workPhone);
    stringcpy(privatePhone, p.privatePhone);
}


Person::~Person()
{
    delete[] firstName;
    delete[] lastName;
    delete[] nickName;
    delete[] address;
    delete[] workPhone;
    delete[] privatePhone;
}

Person& Person::operator=(Person p)
{
    if (this != &p) {
        delete[] firstName;
        delete[] lastName;
        delete[] nickName;
        delete[] address;
        delete[] workPhone;
        delete[] privatePhone;

        firstName = new char[strlen(p.firstName) + 1];
        lastName = new char[strlen(p.lastName) + 1];
        nickName = new char[strlen(p.nickName) + 1];
        address = new char[strlen(p.address) + 1];
        workPhone = new char[strlen(p.workPhone) + 1];
        privatePhone = new char[strlen(p.privatePhone) + 1];

        stringcpy(firstName, p.firstName);
        stringcpy(lastName, p.lastName);
        stringcpy(nickName, p.nickName);
        stringcpy(address, p.address);
        stringcpy(workPhone, p.workPhone);
        stringcpy(privatePhone, p.privatePhone);
    }
    return *this;
}

bool Person::operator==(Person & p)
{
    if (strcmp(firstName, p.firstName) == 0 && strcmp(lastName, p.lastName) == 0 && strcmp(nickName, p.nickName) == 0) {
        return true;
    }
    else
    {
        return false;
    }
}

PhoneBook.cpp

#include "pch.h"
#include "PhoneBook.h"
#include <iostream>
#include <fstream>


PhoneBook::PhoneBook(string pbFileName, int pbSize)
{
    fileName = pbFileName;
    contacts = new Person[size];
    size = pbSize;
    currentSize = 0;
}


PhoneBook::~PhoneBook()
{
    delete[] contacts;
}

void PhoneBook::addPerson(Person p)
{
    if (currentSize < size)
    {
        contacts[currentSize] = p;
        currentSize++;
    }
    else {
        cout << "The phonebook is full!\n";
    }



}

void PhoneBook::removePerson(Person p)
{
    for (size_t i = 0; i < currentSize; i++)
    {
        if (contacts[i] == p) {
            for (size_t j = i; j < currentSize; j++)
            {
                if (j == size - 1) {

                }
                else
                {
                    contacts[j] = contacts[j + 1];
                }
            }
        }
    }
    currentSize--;
}

void PhoneBook::savePhoneBook()
{

}

void PhoneBook::loadPhoneBook()
{
}

void PhoneBook::printPhoneBook()
{
    for (size_t i = 0; i < currentSize - 1; i++)
    {
        cout << this->contacts[i].firstName;
    }
}

main.cpp

// PhoneBook.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include "pch.h"
#include <iostream>
#include "Person.h"
#include "PhoneBook.h"

int main()
{
    PhoneBook pb = PhoneBook("MyPhoneBook", 10);

    Person p1("FirstName1", "LastName1", "nick1", "Addr1", "+123456789", "06123456789");
    pb.addPerson(p1);
    Person p2("FirstName2", "LastName2", "nick2", "Addr2", "+123456789", "06123456789");
    pb.addPerson(p2);
    Person p3("FirstName3", "LastName3", "nick3", "Addr3", "+123456789", "06123456789");
    pb.addPerson(p3);
    Person p4("FirstName4", "LastName4", "nick4", "Addr4", "+123456789", "06123456789");
    pb.addPerson(p4);

    pb.printPhoneBook();

}

Когда я хочу запустить свою простую основную функцию, я получаю следующую ошибку В этот момент :

PhoneBook.exe вызвал точку останова. произошло

Спасибо за любые услуги!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...