主题:[讨论]关于VC++6.0下 delete []动态释放指针数组空间出错问题
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
struct list
{
int *elem;
int size;
int maxsize;
};
bool InitList(list &l) //初始化表
{
l.maxsize=5;
l.elem=new int [l.maxsize];//动态申请空间
if(l.elem==NULL)
{
cout<<"无可用空间,初始化失败。\n"<<endl;
return false;
}
l.size=0;
cout<<"初始化完成,长度为"<<l.size<<"\n"<<endl;
return true;
}
void ClearList(list &l) //删除表
{
if(l.size!=0)
{
delete []l.elem;//动态释放
l.elem=NULL;
}
l.maxsize=0;
l.size=0;
cout<<"清除线性表完成\n"<<endl;
}
bool TraverseList(list l) //遍历
{
if(l.size==0)
{
cout<<"线性表为空"<<endl;
return false;
}
for(int i=0;i<l.size;i++)
{
cout<<"第"<<i+1<<"个元素是"<<l.elem[i]<<endl;
}
return true;
}
void FindList(list l, int item) //查询
{
int k=0;
for(int i=0;i<l.size;i++)
{
if(l.elem[i]==item)
{
cout<<"第"<<i+1<<"个元素满足条件"<<endl;
k++;
}
}
if(k==0)
cout<<"线性表中没有满足条件的元素"<<endl;
cout<<"线性表中有"<<k<<"个满足条件的元素"<<endl;
}
bool InsertList(list &l,int item,int pos) //插入
{
int k=0;
if(pos>l.size)
{
cout<<"pos值越界"<<endl;
return false;
}
if(l.size==l.maxsize)
{
k=sizeof(int);
l.elem=(int*)realloc(l.elem,(l.maxsize+5)*k);
l.maxsize+=5;
}
if(pos==l.size)
{
l.elem[pos]=item;
l.size++;
cout<<"插入成功"<<endl;
return true;
}
for(int i=l.size-1;i>=pos-1;i--)
{
l.elem[i+1]=l.elem[i];
}
l.elem[pos]=item;
cout<<"插入成功"<<endl;
l.size++;
return true;
}
void Jc(list &l)
{
if((l.maxsize-l.size)>5&&(l.maxsize>10))
{
int k=sizeof(int);
l.elem=(int*)realloc(l.elem,(l.maxsize-5)*k);
l.maxsize-=5;
}
}
bool DeleteList(list &l,int pos) //删除
{
if(pos>l.size)
{
cout<<"pos越界"<<endl;
return false;
}
if(pos==l.size)
{
l.size--;
cout<<"删除完成"<<endl;
Jc(l);
return true;
}
for(int i=pos;i<=l.size;i++)
{
l.elem[i]=l.elem[i+1];
}
l.size--;
cout<<"删除完成"<<endl;
Jc(l);
return true;
}
void SortList(list &l) //又小到大排序
{
int k=0;
for(int i=1;i<l.size;i++)
{
k=l.elem[i];
for(int j=i-1;j>=0;j--)
{
if(l.elem[j]>k)
{
l.elem[j+1]=l.elem[j];
l.elem[j]=k;
}
}
}
cout<<"排序完成"<<endl;
}
void main()
{
list lis;
int a,b,c;
InitList(lis);
for(int i=0;i<lis.maxsize;i++)
{
cout<<"请输入要插入到"<<i+1<<"的元素:";
cin>>a;
InsertList(lis,a,i);
}
TraverseList(lis);
cin>>b;
FindList(lis,b);
cin>>c;
DeleteList(lis,c);
TraverseList(lis);
SortList(lis);
TraverseList(lis);
ClearList(lis);//在这清楚表 但是每次到这步都会弹出错误 编译的没有错误提示
getch();
}
上面是源代码 在运行到ClearList(lis)这步的时候就会出错 请大家帮帮忙 我不知道是不是我电脑的问题 谢谢
#include <stdlib.h>
#include <conio.h>
struct list
{
int *elem;
int size;
int maxsize;
};
bool InitList(list &l) //初始化表
{
l.maxsize=5;
l.elem=new int [l.maxsize];//动态申请空间
if(l.elem==NULL)
{
cout<<"无可用空间,初始化失败。\n"<<endl;
return false;
}
l.size=0;
cout<<"初始化完成,长度为"<<l.size<<"\n"<<endl;
return true;
}
void ClearList(list &l) //删除表
{
if(l.size!=0)
{
delete []l.elem;//动态释放
l.elem=NULL;
}
l.maxsize=0;
l.size=0;
cout<<"清除线性表完成\n"<<endl;
}
bool TraverseList(list l) //遍历
{
if(l.size==0)
{
cout<<"线性表为空"<<endl;
return false;
}
for(int i=0;i<l.size;i++)
{
cout<<"第"<<i+1<<"个元素是"<<l.elem[i]<<endl;
}
return true;
}
void FindList(list l, int item) //查询
{
int k=0;
for(int i=0;i<l.size;i++)
{
if(l.elem[i]==item)
{
cout<<"第"<<i+1<<"个元素满足条件"<<endl;
k++;
}
}
if(k==0)
cout<<"线性表中没有满足条件的元素"<<endl;
cout<<"线性表中有"<<k<<"个满足条件的元素"<<endl;
}
bool InsertList(list &l,int item,int pos) //插入
{
int k=0;
if(pos>l.size)
{
cout<<"pos值越界"<<endl;
return false;
}
if(l.size==l.maxsize)
{
k=sizeof(int);
l.elem=(int*)realloc(l.elem,(l.maxsize+5)*k);
l.maxsize+=5;
}
if(pos==l.size)
{
l.elem[pos]=item;
l.size++;
cout<<"插入成功"<<endl;
return true;
}
for(int i=l.size-1;i>=pos-1;i--)
{
l.elem[i+1]=l.elem[i];
}
l.elem[pos]=item;
cout<<"插入成功"<<endl;
l.size++;
return true;
}
void Jc(list &l)
{
if((l.maxsize-l.size)>5&&(l.maxsize>10))
{
int k=sizeof(int);
l.elem=(int*)realloc(l.elem,(l.maxsize-5)*k);
l.maxsize-=5;
}
}
bool DeleteList(list &l,int pos) //删除
{
if(pos>l.size)
{
cout<<"pos越界"<<endl;
return false;
}
if(pos==l.size)
{
l.size--;
cout<<"删除完成"<<endl;
Jc(l);
return true;
}
for(int i=pos;i<=l.size;i++)
{
l.elem[i]=l.elem[i+1];
}
l.size--;
cout<<"删除完成"<<endl;
Jc(l);
return true;
}
void SortList(list &l) //又小到大排序
{
int k=0;
for(int i=1;i<l.size;i++)
{
k=l.elem[i];
for(int j=i-1;j>=0;j--)
{
if(l.elem[j]>k)
{
l.elem[j+1]=l.elem[j];
l.elem[j]=k;
}
}
}
cout<<"排序完成"<<endl;
}
void main()
{
list lis;
int a,b,c;
InitList(lis);
for(int i=0;i<lis.maxsize;i++)
{
cout<<"请输入要插入到"<<i+1<<"的元素:";
cin>>a;
InsertList(lis,a,i);
}
TraverseList(lis);
cin>>b;
FindList(lis,b);
cin>>c;
DeleteList(lis,c);
TraverseList(lis);
SortList(lis);
TraverseList(lis);
ClearList(lis);//在这清楚表 但是每次到这步都会弹出错误 编译的没有错误提示
getch();
}
上面是源代码 在运行到ClearList(lis)这步的时候就会出错 请大家帮帮忙 我不知道是不是我电脑的问题 谢谢