程序给出了一个奇怪的运行时错误

时间:2014-10-14 12:53:43

标签: c++ runtime-error

    #include<iostream>

using namespace std;

class darray
{

private:
    int n; // size of the array
    int *a; // pointer to the 1st element

public:
    darray(int size)
    {
        n = size;
        a = new int[n];
    }

    ~darray(){ delete[] a; }

    void get_input();
    int get_element(int index);
    void set_element(int index, int value);
    int count(){ return n; }
    void print();
};


void darray::get_input()
{
    for (int i = 0; i < n; i++)
    {
        cin >> *(a + i);
    }
}

int darray::get_element(int index)
{
    if (index == -1)
        index = n - 1;
    return a[index];
}

void darray::set_element(int index,int value)
{
    a[index] = value;
}

void darray::print()
{
    for (int i = 0; i < n; i++)
    {
        cout << a[i];
        if (i < (n - 1))
            cout << " ";
    }
    cout << endl;
}

// perform insertion sort on the array a
void insertion_sort(darray d)
{
    int v = d.get_element(-1); // v is the right-most element
    int e = d.count() - 1; // pos of the empty cell
    // shift values greater than v to the empty cell
    for (int i = (d.count() - 2); i >= 0; i--)
    {
        if (d.get_element(i) > v)
        {
            d.set_element(e,d.get_element(i));
            d.print();
            e = i;
        }
        else
        {
            d.set_element(e, v);
            d.print();
            break;
        }

    }
}

int main()
{
    int s;
    cin >> s;
    darray d(s);
    d.get_input();
    insertion_sort(d);
    system("pause");
    return 0;
}

我使用darray类在运行时创建一个大小为n的数组。该类提供了处理此数组的基本函数。 这个程序说最后调试断言失败了。 破坏程序后会出现此错误。除此之外,程序运行正常。这个错误的原因是什么?

1 个答案:

答案 0 :(得分:0)

您需要声明并定义一个复制构造函数:

darray::darray(const darray& src)
{
    n = src.n;
    a = new int[n];
    for (int i = 0; i < n; i++)
    {
        *(a + i) = *(src.a + i);
    }
}