C++问题,我晕了 ,高手速进!急!急!急!编译0错误,0警告!

空云万里晴 发布于 2011/10/05 23:49
阅读 451
收藏 0

#include"iostream"
using namespace std;

template<class T>

class SqList  
{

private:

 T *elem; //表首地址
 int curlen; //当前表长
 int maxsize; //表最大容量

public:

 SqList(int maxsz)  //构造函数,用于创建一个容量为maxsz的空表
 {
 maxsize=maxsz;
 curlen=0;
 elem=new T[maxsize];
 }

 SqList(T a[],int n,int maxsz)  //重载构造函数
 {
 curlen=n;
 maxsize=maxsz;
 for(int i=0;i<curlen;i++)
 elem[i]=a[i];
 } 

 virtual ~SqList()  //析构函数,删除表空间
 {
 delete [] elem;
 curlen=0;
 maxsize=0;
 }

 void disp()  //输出顺序表元素
 {
 for(int j=0;j<curlen;j++)
 {
 cout<<elem[j]<<"  "<<endl;
 }
 }
};

int main()
{

 char a[20]={'a','b','c','d','e'};
 SqList<char> s(a,5,20);

 s.disp();

 return 0;

}

编译完全通过,无警告!

但是就是不能运行!!

加载中
0
空云万里晴
空云万里晴

这是运行结果!
0
空云万里晴
空云万里晴
什么原因呢?
0
周翼翼
周翼翼

SqList(T a[],int n,int maxsz)  //重载构造函数

{

curlen=n;

maxsize=maxsz;

for(int i=0;i<curlen;i++)

elem[i]=a[i];

}

这里并没有为elem分配内存.加上new;或者直接elem=a,后一种方法内存管理要复杂一些.

你要保证传进来的a不被释放掉.

0
空云万里晴
空云万里晴

引用来自“周翼翼”的答案

SqList(T a[],int n,int maxsz)  //重载构造函数

{

curlen=n;

maxsize=maxsz;

for(int i=0;i<curlen;i++)

elem[i]=a[i];

}

这里并没有为elem分配内存.加上new;或者直接elem=a,后一种方法内存管理要复杂一些.

你要保证传进来的a不被释放掉.

老兄,一语惊醒梦中人啊!

感谢!

返回顶部
顶部