почему то не работает delete[]

почему то при добавлении 2йки когда в add вызывается setsize ,delete[] вызывает ошибку не понимаю из за чего это. введите сюда описание изображения

 #include <iostream>
    #include "Mnoj.h"
    int main()
    {
        int a = 5;
        Mnoj g(a);
        g += 8;
        g += 2;
    }
#pragma once
#include <iostream>
class Mnoj
{
    int n = 0;
    int* m = 0;
public:
    void setsize(int k)
    {
        int* a = new int[k];
        if (n > k)
            n = k;
        for (int i = 0; i < n; ++i)
            a[i] = m[i];
        n = k;
        delete[] this->m;
        m = a;
    }
    Mnoj()
    {}
    Mnoj(const int a) :n(1),m(new int[1])
    {
        m[0] = a;
    }
    
    Mnoj(const Mnoj& a) :n(a.n), m(new int[a.n])
    {
        for (int i = 0; i < n; ++i)
            m[i] = a.m[i];
    }
    ~Mnoj()
    {
        delete[] m;
    }
    bool Check(int a) const
    {
        bool b = false;
        for (int i = 0; (i < n)&&(!b); ++i)
            if (m[i] == a)
                b = true;
        return b;
    }
    int size() const
    {
        return n;
    }
    void add(int a)
    {
        if (!Check(a))
        {
            setsize(n + 1);
            m[n] = a;
        }
    }
    Mnoj& operator +=(const int a)
    {
        add(a);
        return *this;
    }
};

Ответы (1 шт):

Автор решения: AlexGlebe
void add(int a)
{
    if (!Check(a))
    {

        setsize(n + 1);
        // здесь n уже увеличился на единицу

        // а здесь неправильный доступ к памяти
        m[n] = a;

        // правильно так :
        m[n-1] = a;
    }
}
→ Ссылка