почему то не работает 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;
}
}