• Бесплатный ВЕБИНАР по OSINT с Екатериной Тьюринг: ➡️9 февраля в 19:00 (мск) пройдет урок

    Как безопасно искать информацию в открытых источниках

    🔥 Записаться 🔥

Debugger Vc++ ругается. Help!

  • Автор темы Автор темы Guest
  • Дата начала Дата начала
G

Guest

Помогите пожалуйста найти причину.

Создать 2 объекта разработанного класса. Класс - динамический вектор. В резудьтате выполнения программы в первом объекте должны содержатся все чётные, а во втором все нечётные числа исходных векторов. Содержимое объектов до и после обмена вывести на экран.

Debugger VC++ ругается при выполнении программы, если выбрать в диалоговом окне пункт "Пропустить", то выполняется правильно.

Код:
#include<iostream>

using namespace std;

class Vector
{
public:
Vector();
Vector(int );
~Vector();
int & operator[](int i);
int Get_x() const {return *x;}
int Get_N() const {return N;}

void Add(int k);
void Delete(int p);
void Print(int);

private:
int *x;
int N;  
};

Vector::Vector()
{
N=5;
x=new int[N];
cout<<endl<<endl<<"constructor"<<endl<<endl;
}

Vector::Vector(int a)
{
if(a<=0)
cout<<"недопустимый размер вектора";
else
{
N=a;
x=new int[N];
cout<<endl<<endl<<"constructor s parametrami"<<endl<<endl;
}
}

Vector::~Vector()
{
delete [] x;
N=0;
cout<<endl<<endl<<"destructor"<<endl<<endl;

}

int & Vector::operator [](int i)
{
if(i>N)
return x[N-1];
else
return x[i];
}

void Vector::Add (int k)
{
int *q=x;
x=new int [N++];
for (int i=0; i<N; i++)
x[i]=q[i];
delete [] q;
x[N-1] =k;
}

void Vector::Delete (int p)
{
int *q=x;
x=new int [N--];
for (int i=0, k=0; i<N; i++, k++)
if(i==p)
{
p-=2;
i--;
}
else
x[i] =q[k];
delete [] q;
}

void Vector::Print(int n)
{
for(int i=0;i<N;i++)
cout<<n<<": "<<i+1<<": "<<x[i]<<endl;
cout<<endl;	  

}


void main()
{
Vector One;
Vector Two;
int i;
for( i=0;i<One.Get_N();i++)
One[i]=(i+10);
for( i=0;i<Two.Get_N();i++)
Two[i]=(i+20);

One.Print(1);
Two.Print(2);

for( i=0;i<One.Get_N();i++)
if(One[i]%2==0)
{
Two.Add(One[i]);
One.Delete(i);
}
for( i=0;i<Two.Get_N();i++)
if(Two[i]%2!=0)
{
One.Add(Two[i]);
Two.Delete(i);
} 
One.Print(1);
Two.Print(2);	  
}
 
Надо нажимать не Пропустить, а отладить или что-там еще, и отладчик тебе сам покажет где проблема. Навскидку в Add есть чтение за границами массива, больше не искал.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!