struct student*shanchuxinxi(struct student *h) //返回删除信息后的链表头地址 { char number2[10]; struct student*p1,*p2; int n; p1=h; printf("请选择需要删除几个同学的信息:");scanf("%d",&n); system("cls"); studentsum-=n; for(int i=0;i<n;i++){ printf("请输入被删除同学的学号:\n"); scanf("%s",number2); while(h!=NULL&&strcmp(h->number,number2)==0) { h=h->next; free(p1); } p1=h; p2=h->next; while(p2!=NULL) { if(strcmp(p2->number,number2)==0) { p1->next=p2->next; free(p2); p2=p1->next; } else { p1=p2;p2=p1->next; } } } return h; }执行完链表的删除操作后,被删除的节点为什么成了一堆乱码
时间: 2024-03-04 21:50:07 浏览: 50
学生信息数据元素的C语言表示方法是-数据结构C语言
从您提供的代码来看,删除节点之后,节点的内存并没有被清空或者重新初始化,所以被删除的节点的值仍然存在于它的内存中,但是它的指针已经被释放了,这就导致了访问这些已经被释放的内存时,出现了一堆乱码。这也是为什么在删除节点后,应该用 `free()` 函数释放该节点的内存,并将该节点的指针设置为 `NULL`,以避免访问已经被释放的内存导致的问题。
阅读全文