Chinaunix

标题: vs2010下写个单链表的操作出现了错误,求大神指导 [打印本页]

作者: myzonesky    时间: 2013-10-08 16:39
标题: vs2010下写个单链表的操作出现了错误,求大神指导
本帖最后由 myzonesky 于 2013-10-08 16:39 编辑
  1. typedef  int Status;
  2. typedef char ElemType;

  3. typedef struct Node
  4. {
  5.         ElemType data;
  6.         struct Node * next;
  7. } Node;

  8. typedef struct Node* LinkList;
复制代码
  1. Status ListDelElem( LinkList *L, unsigned int n, ElemType *e)
  2. {
  3.         LinkList p = *L;
  4.         Node* q ;
  5.         int j = 0;
  6.         while( p->next != NULL && j < n )//找到第n个节点之前的那个节点,然后删掉第n个节点
  7.         {
  8.                 p = p->next;
  9.                 j++;
  10.         }

  11.         if ( p->next == NULL || j > n )
  12.                 return ERROR;
  13.         q                         = p->next;

  14.         if ( q->next == NULL )
  15.         {
  16.                 *e                         = q->data;
  17.                 p->next = NULL;
  18.                 free(q);
  19.         }
  20.         else
  21.         {
  22.                 *e                         = q->data;
  23.                 p->next = q->next;
  24.                 free(q);
  25.                 q = NULL;
  26.                 return OK;
  27.         }
  28.        
  29. }
复制代码
在调试到free(q)时,出现以下问题

QQ截图20131008163821.png (26.3 KB, 下载次数: 29)

QQ截图20131008163821.png

作者: kdkgod    时间: 2013-10-08 17:05
代码都不全,让别人怎么查,谁知道你的q是在哪new的,还是根本就不是new出来的。
作者: mfkp3    时间: 2013-10-08 20:25
while循环是让p指向第n-1个节点么? 怎么感觉是指向了n+1的节点。

作者: fender0107401    时间: 2013-10-09 08:41
这种基础问题自己搞定。。。
作者: Love_for_Live    时间: 2013-10-09 10:43
应该是内存管理错误!你自己看看。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2