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

Тема в разделе "MS Visual C++", создана пользователем -, 7 ноя 2008.

  1. Гость

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

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

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

    Код (Text):
    #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);    
    }
     
  2. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Надо нажимать не Пропустить, а отладить или что-там еще, и отладчик тебе сам покажет где проблема. Навскидку в Add есть чтение за границами массива, больше не искал.
     
  3. Гость

    Огромное спасибо.
     
Загрузка...

Поделиться этой страницей