请问,这段代码有哪里存在内存泄漏的情况吗
#include
#include
using namespace std;
int len;
struct LinkedList {
int x;
LinkedList *next=nullptr;
LinkedList *head=nullptr;
LinkedList *get(int i) {
LinkedList *a,*b;
a=head;
while (i>0&&i<=len) {
b=a->next;
a=b;
i--;
}
return b;
}
void initialize() {
int n;
scanf("%d", &n);
len=n;
int *a = new int[n];
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
LinkedList *p;
head=new LinkedList;
p=new LinkedList;
head->next=p;
for (int i = 1;iq=new LinkedList;
(get(i)->next)=q;
}
for(int i = 0; i < n; i++)
{
get(i+1)->x=a[i];
}
delete[] a;
}
void insert(int i, int x) {
LinkedList *tmp=new LinkedList;
tmp->x=x;
if(i==len) {get(len)->next=tmp;}
else {tmp->next=get(i+1);
get(i)->next=tmp;
}
len++;
}
void erase(int i) {
LinkedList *tmp,*tmlp;
if(i>1&&itmp=get(i-1);tmlp=get(i);
tmp->next=tmlp->next;
tmlp->x=0;
delete tmlp;
len--;
}
if(i==1) {tmp=get(1);
head->next=get(2);
tmp->x=0;
delete tmp;
len--;}
if(i==len) {
tmp=get(len-1);tmlp=get(len);
tmp->next=nullptr;
tmlp->x=0;
delete tmlp;len--;
}
}
void swap() {
if(len%2==0){int a[len/2],b[len/2];
for (int i=1;i<=len;i++){
if(i%2!=0) a[(i+1)/2]=get(i)->x;
else b[i/2]=get(i)->x;
}
for (int j=1;j<=len;j++){
if(j%2!=0) get(j)->x=b[(j+1)/2];
else get(j)->x=a[j/2];
}
}
else {int a[len-1/2],b[len-1/2];
for (int i=1;i<=len-1;i++){
if(i%2!=0) a[(i+1)/2]=get(i)->x;
else b[i/2]=get(i)->x;
}
for (int j=1;j<=len-1;j++){
if(j%2!=0) get(j)->x=b[(j+1)/2];
else get(j)->x=a[j/2];
}
}
}
void moveback(int i, int x) {
LinkedList *p,*q,*a,*b,*y;
p=get(1);q=get(i);
a=get(i+x);b=get(i+x+1);y=get(i+1);
head->next=y;
a->next=p;q->next=b;
}
int query(int i) {
int l=get(i)->x;
return l; }
void printAll() {
for (int i=1;i<=len;i++)
{
cout<<get(i)->x<<' ';
}
cout << endl;
}
void ClearMemory() {
LinkedList *p=head->next,*q;
head->next=NULL;
while(p!=NULL&&p->next!=nullptr){
q=p->next;
delete p;
p=q;
}
len=0;
delete head;
}
};
int main() {
LinkedList List;
int m, op, i, x;
List.initialize();
scanf("%d", &m);
while(m--) {
scanf("%d", &op);
if(op == 1) {
scanf("%d%d", &i, &x);
List.insert(i, x);
}
else if(op == 2) {
scanf("%d", &i);
List.erase(i);
}
else if(op == 3) {
List.swap();
}
else if(op == 4) {
scanf("%d%d",&i, &x);
List.moveback(i, x);
}
else if(op == 5) {
scanf("%d", &i);
printf("%d\n", List.query(i));
}
else if(op == 6) {
List.printAll();
}
}
List.ClearMemory();
return 0;
}
struct LinkedList {
int x;
LinkedList *next=nullptr;
LinkedList *head=nullptr;
LinkedList *get(int i) {
LinkedList *a,*b;
a=head;
while (i>0&&i<=len) {
b=a->next;
a=b;
i--;
}
return b;
}
这里不是函数,而是结构体定义,写得好奇怪
明白了,你上面少了一个花括号