动态数组添加

时间:2018-05-15 15:32:48

标签: c++ arrays class dynamic

我想存储我从基类派生的3种类型的继承类。我想存储指向基类的指针,列表类创建这些指针的动态数组。

我的列表类:

class list{
int n;
base **array;
public:
    list() :n(0),array(NULL){};

void add(base* x);
~csapatlista(){
for(int i = 0;i<n;i++){
    delete[] array[i];
}
};

这是我的添加功能。

 void list::add(base* x){
    base **temp;
    temp = new base*[n+1];
        for(int i = 0;i<n;i++){
        temp[i] = array[i];
            }
    temp[n+1] = x;
    if(array != NULL){delete[] *array;}

    array = temp;
    n += 1;
};

基类只包含1-2个int变量。 由于某些原因我不知道我的程序崩溃或产生一个memtrace错误,表明我的add函数有问题。另外,我仍然不太明白如果我们只存储指针,这是如何存储继承的对象基类。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题

temp = new base*[n+1];

base分配一个n + 1指针数组。这些是索引[0,n]。

temp[n+1] = x;

x分配给temp[n+1]。 n + 1不在[0,n]的范围内。

解决方案

你想要

temp[n] = x;

x放在temp的最后一个广告位中。

相依

if(array != NULL)

是不必要的。

delete[] array;

为你处理null array个案。

析构函数不会删除array,因此您有一个小泄漏。