我想存储我从基类派生的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函数有问题。另外,我仍然不太明白如果我们只存储指针,这是如何存储继承的对象基类。
感谢任何帮助。
答案 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
,因此您有一个小泄漏。