Как решить ошибку нарушение прав доступа при чтении по адресу?

Здравствуйте столкнулся с runtime ошибкой которая говорит следущее:
Вызвано исключение по адресу 0x007C3AD9 в home_oop_inheritance_virtual_metod_spd_animal.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000.

Код в котором появляется ошибка:
void printAll(){
        for (size_t i = 0; i < zoo.size() + 1; i++)
        {
            zoo[i]->show();// ошибку выдает здесь
            cout << endl;
        }
    }


Код родительского класса:
class Animal
{
protected:
    string name = "NoName";
    size_t age = 1;
public:
    Animal(const string& name, const size_t& age)
        :name(name), age(age) {}
    Animal() = default;

    virtual void sound() const = 0;
    virtual void type() const = 0;
    virtual void show() const = 0;

    string getName() {
        return this->name;
    }
    size_t getAge() {
        return this->age;
    }
    
    void setName(const string& newName) {
        if (newName != "")
        {
            name = newName;
            return;
        }
        return;
    }
    void setAge(const size_t newAge) {
        if (newAge >= 0)
        {
            age = newAge;
            return;
        }
        return;
    }
};


Это код на котором я только изучаю наследование в С++ так-что не судите строго если там есть ошибки. Буду благодарен за любую помощь.

P.S. Я решил немного изменить метод вывода.
for (size_t i = 0; i < zoo.size() - 1; i++)
        {
            zoo[i]->type();
            cout << " Name: " << zoo[i]->getName() << " Age: " << zoo[i]->getAge() << " ";
            zoo[i]->sound();

            cout << endl;
        }


P.S.(2) в меом случае zoo это vector
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
gbg
@gbg Куратор тега C++
Баянист. Тамада. Услуги.
Ну гарантированный улет за границу массива вот тут i < zoo.size() + 1
Что тут делает +1?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Запустите в дебаггере. Он остановится на строке с ошибкой. Проверьте значения всех переменных (zoo - размер вектора? i - чему равно?)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы