2025-03-02 02:07:49
你这个销毁函数本身没有问题,它是正确的,问题产生的根源在你的链表生成函数。
你的链表生成函数的入参是一个指针,作为形参,你能改变它指向的东西,但是不能改变形参本身体。也就是说,你在链表创建函数类生成了链表,但是出了这个函数,实参并没有指向你生成的这个链表。你的list仅仅是一个链表元素,你的程序里,它并不是动态生成的,而是一个局部变量,这时候你去free释放它,就会报错。
修改很简单,把创建函数参数改成指向指针的指针。如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
void CreatList_L(LinkList *L, int n);//参数改成LinkList 的指针,对链表元素来说,就是指针的指针
void DestoryList_L(LNode* L);//正确的,不需要修改
int main()
{
//LNode list;//这个可以不要
LNode *pList = NULL;//直接声明一个
指针就可以 ,调用CreatList_L之后,pList 就会指向你动态生成的链表了。
CreatList_L(&pList,3); //传入指针地址
DestoryList_L(pList);
}
void CreatList_L(LinkList *L, int n) {
LNode *p,*r;
int i;
*L=(LinkList)malloc(sizeof(struct LNode)); //注意要对L解引用
if(*L==NULL)
exit(1);
(*L)->next=NULL;
p=r=(*L);
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(struct LNode));
scanf("%d",&p->data);
p->next=NULL;
r->next=p;
r=p;
}
for(p=(*L)->next;p!=NULL;p=p->next)
printf("%-5d",p->data);
printf("\n");
}
void DestoryList_L(LNode* L)
{
LNode *p; int n=0;
while(L)
{
p=L;
L=L->next;
free(p);
n++;
}
printf("%d\n",n);
}
运行截图:
你的n输出有问题,应该是n-1
2025-03-02 09:12:02
2025-03-02 07:47:06
2025-03-02 02:59:06
能不能按照我写的给我写一个void DestoryList_L(LNode* L)函数?谢谢!