永发信息网

1.为什么我用free()老是报错 2 我想要在位序一前插入数据时,输出老是有-84215045

答案:1  悬赏:30  手机版
解决时间 2021-11-29 17:16
1.为什么我用free()老是报错 2 我想要在位序一前插入数据时,输出老是有-84215045
最佳答案
free报错是因为你创建了过后应该到程序最后进行释放,假设你在创建过后就释放,他就不存在了,你就不能再访问他了,当然你输出就出错了
--------
输出-84215045,是你定义了一个表头结点,跳过他,不要输出
修改如下:
#include
#include
#include
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*Linklist;
void CreateList(Linklist &L,int n)
{
int i;
LNode *p;
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;i--)
{
p=(Linklist)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
int ListInsert(Linklist &L,int i,int e)
{
Linklist s,p;
p=L;
int j=0;
while(p&&j{
L=L->next;
++j;
}
if(!p||j>i-1)
return ERROR;
s=(Linklist)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
// free(s);
}
void print(Linklist L)
{
L = L->next;
while(L)
{
printf("%d\t",L->data);
L=L->next;
}
}
int main()
{
Linklist La;
int i,n,e;
scanf("%d",&i);
CreateList(La,i);
scanf("%d",&n);
scanf("%d",&e);
ListInsert(La,n,e);
print(La);
return 0;
}
-------------------------------
当然此程序还有很大错误,比如只能ListInsert的时候没有连接数据,就是最后数据丢失了。。
CreateList的时候用的方式是头插入数据,最后打印的数据是倒过来的。。
------------------------------------------------------------
这是添加了free的:

#include
#include
#include
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*Linklist;
void CreateList(Linklist &L,int n)
{
int i;
LNode *p;
L=(Linklist)malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;i--)
{
p=(Linklist)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
int ListInsert(Linklist &L,int i,int e)
{
Linklist s,p;
p=L;
int j=0;
while(p&&j{
L=L->next;
++j;
}
if(!p||j>i-1)
return ERROR;
s=(Linklist)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
// free(s);
}
void print(Linklist L)
{
L = L->next;
while(L)
{
printf("%d\t",L->data);
L=L->next;
}
}
void MyFree(Linklist L)
{
Linklist p;
while(L)
{
p = L;
L = L->next;
free(p);
p = NULL;
}
}
int main()
{
Linklist La;
int i,n,e;
scanf("%d",&i);
CreateList(La,i);
scanf("%d",&n);
scanf("%d",&e);
ListInsert(La,n,e);
print(La);
MyFree(La);
return 0;
}来自:求助得到的回答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
Did Dan isask you where to get a bus
关于知识无贵贱名人名言
日本动漫我听过大阪腔,福井腔,日漫里听上去
10A交流接触器和20A交流接触器有何区别
中式快餐打入中东某国,需要进行哪些市场调查
这句英语什么意思啊?this one maybe lost co
成吉理发店地址在什么地方,我要处理点事!
12款大众朗逸1·4自动机中控怎么操作
用化学符号填空.(1)两个氮原子________;?
如何提高酒店客房卫生管理
东城卫成员里“陈德修”和“陈志介”是亲兄弟
这幅刘雨岑的瓷画是真迹吗?
仙剑2邪雾密林和武林人士打架要怎么过
rmvb格式的视频怎么剪辑?
焦点发社地址有知道的么?有点事想过去!
推荐资讯
天下口天上口,江东川西楚蜀地。求下联!
抢票软件已经抢到票·但是成人的·那还能退一
什么花什么乱
2017年1月21日到20187月13日 有几天? 有几个
孩子将来是不是长的高,其实从身上这四个部位
hear的同义词三个字母
舟山到安庆多少公里,大概几个小的到达安床
描写滋味的abb式词语
支付宝里的存金宝 1元投起 怎么玩?
9·1除X=13
区分美国班鸠和国内班鸠
K946火车途经哪些车站
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?