为什么我的代码提交上去系统显示有内存错误?求指点!
代码可以正常输出,但系统显示以下错误错误原因可能是:
非法的内存引用, 具体原因可能是:
1.数组越界使用;
2.指针的错误使用, 一般是对非用户区的地址空间进行读或者写操作;
3.越权操作文件指针, 程序中却未捕捉该类错误;
4.栈溢出, 一般是因为过多的递归调用或者过大的临时变量导致;5.程序使用的内存超过了题目设定的上限。
代码如下:
#include <iostream>
#include<stdio.h> //用于scanf,printf标准输入输出
#include<stdlib.h>//用于malloc,free内存申请与释放
using namespace std;
typedef struct Node *LinkList;
struct Node
{
int data;
LinkList next;
};
LinkList CreatFromTail() //构建单链表
{
LinkList q,r,L;
int i,n;
L=(Node*)malloc(sizeof(Node));
r=L;
scanf("%d",&n);
for(i=0;i<n;i++)
{
q=(Node*)malloc(sizeof(Node));
scanf("%d",&q->data);
r->next=q;
r=q;
}
r->next=NULL;
return L;
}
LinkList merge(LinkList a,LinkList b) //合并两个链表
{
LinkList p=a->next;
while(p->next)
{
p=p->next;
}
p->next=b->next;
free(b);
return a;
}
LinkList DeleteSame(LinkList L) //删除链表中的重复元素
{
LinkList p=L->next,q,r;
while(p!=NULL)
{
r=p->next;
q=p;
while(r!=NULL)
{
if(r->data==p->data)
{
q->next=r->next;
r=r->next;
}
else
{
q=q->next;
r=r->next;
}
}
p=p->next;
}
return L;
}
LinkList sort(LinkList L) //排序
{
LinkList p=L->next,q,r;
if(p!=NULL)
{
r=p->next;
p->next=NULL;
p=r;
while(p!=NULL)
{
r=p->next;
q=L;
while(q->next!=NULL&&q->next->data<p->data)
q=q->next;
p->next=q->next;
q->next=p;
p=r;
}
}
return L;
}
void show(LinkList l) //输出链表
{
LinkList p=l;
while(p)
{
p=p->next;
printf("%d",p->data);
printf(" ");
}
}
int main()
{
LinkList w,v,y,z,s;
w=CreatFromTail();
v=CreatFromTail();
y=merge(w,v);
s=DeleteSame(y);
z=sort(s);
show(z);
return 0;
} 请问,你这个是没有头节点,却有头指针把?
页:
[1]