|  | 
 
| 
单链表的基本操作问题,调试的过程中出现问题卡在display函数中加粗的那一部分,错误信息是:“ 中的 0x01161662 处有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcdcd 时发生访问冲突”,希望有人解答,谢谢了!!!
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 
 #include <stdio.h>
 #include <stdlib.h>
 #define ElemType int
 #define Status int
 #define OK 1
 #define ERROR 0
 typedef struct List
 {
 ElemType data;
 struct List *next;
 }linklist;
 
 Status CreateList(linklist *L)
 {
 //创建一个单链表
 linklist *p;
 L->next=NULL;
 p=(linklist *)malloc(sizeof(linklist));
 if(!p){
 printf("内存分配失败!");
 return 0;
 }
 return OK;
 }
 
 Status listinsert(linklist *L,int i,ElemType e)
 {
 //单链表的简单插入
 int j;
 linklist *p,*q;
 q=L;
 p=(linklist *)malloc(sizeof(linklist));
 if(!p)
 return ERROR;
 p->data=e;
 for(j=0;j<i-1;++j){
 q=q->next;
 }
 p->next=q->next;
 q->next=p;
 return OK;
 }
 
 Status listdel(linklist *L,int i,ElemType *e)
 {
 //单链表的删除操作
 int j;
 linklist *p;
 linklist *q=(linklist *)malloc(sizeof(linklist));
 p=L;
 for(j=0;j<i-1;++j){
 p=p->next;
 }
 q=p->next;
 *e=q->data;
 p->next=q->next;
 q->next=NULL;
 free(q);
 return OK;
 }
 
 Status display(linklist *L)
 {
 linklist *p;
 p=L->next;
 while(p){
 printf("%d ",p->data);
 p=p->next;
 }
 printf("\n");
 return OK;
 }
 
 int main(void)
 {
 int i,di;
 ElemType e,de;
 linklist *L=(linklist *)malloc(sizeof(linklist));
 if(!L)
 return ERROR;
 printf("please input the insert lo & elem:\n");
 scanf("%d %d",&i,&e);
 listinsert(L,i,e);
 printf("The list after insert is ;\n");
 display(L);
 printf("please input the del number :\n");
 scanf("%d",&di);
 listdel(L,di,&de);
 printf("The del num is %d\n",de);
 printf("The list after del is :\n");
 display(L);
 free(L);//手动释放堆中分配的内存
 return 0;
 }
 
#include <stdio.h>#include <stdlib.h>
 
 #define ElemType int
 #define Status int
 #define OK 1
 #define ERROR 0
 
 typedef struct List
 {
 ElemType data;
 struct List *next;
 }linklist;
 
 
 // 没有用到 CreateList ?
 //Status CreateList(linklist *L)
 //{
 //        //创建一个单链表
 //        linklist *p;
 //
 //        L->next = NULL;
 //        p = (linklist *)malloc(sizeof(linklist));
 //        if(!p)
 //        {
 //                printf("内存分配失败!");
 //                return 0;
 //        }
 //        return OK;
 //}
 
 Status listinsert(linklist *L, int i, ElemType e)
 {
 //单链表的简单插入
 int j;
 linklist *p, *q;
 
 q = L;
 p = (linklist *)malloc(sizeof(linklist));
 if(!p)
 return ERROR;
 
 p->data = e;
 for(j = 0; j<i - 1; ++j)
 {
 q = q->next;
 }
 p->next = q->next;
 q->next = p;
 
 return OK;
 }
 
 Status listdel(linklist *L, int i, ElemType *e)
 {
 //单链表的删除操作
 int j;
 linklist *p;
 linklist *q = (linklist *)malloc(sizeof(linklist));
 p = L;
 for(j = 0; j<i - 1; ++j)
 {
 p = p->next;
 }
 q = p->next;
 *e = q->data;
 p->next = q->next;
 q->next = NULL;
 free(q);
 return OK;
 }
 
 Status display(linklist *L)
 {
 linklist *p;
 p = L->next;
 while(p)
 {
 printf("%d ", p->data);
 p = p->next;
 }
 printf("\n");
 return OK;
 }
 
 int main(void)
 {
 int i, di;
 ElemType e, de;
 linklist *L = (linklist *)malloc(sizeof(linklist));
 if(!L)
 return ERROR;
 
 L->next = NULL;
 
 printf("please input the insert lo & elem:\n");
 scanf("%d %d", &i, &e);
 listinsert(L, i, e);
 printf("The list after insert is ;\n");
 display(L);
 printf("please input the del number :\n");
 scanf("%d", &di);
 listdel(L, di, &de);
 printf("The del num is %d\n", de);
 printf("The list after del is :\n");
 display(L);
 free(L);//手动释放堆中分配的内存
 return 0;
 }
 | 
 |