struct MM
{
  int count;
  struct MM * next;
}
struct GG
{
int a;
struct MM * head;
}
void addnode(struct GG * gg)
{
  struct MM * p1 = gg->head;
  for(int i = 0; i < 11 ; i ++)
  {
     struct MM * p2 = new struct MM;
     p1->next = p2;
     p1 = p2;
  }
}void deletenode(strcut MM * mm)
{
   if(mm->next != NULL)
deletenode(mm->next);
   delete mm;      // 在.net环境下说,用户未处理异常

程序只要运行到 最后一句就报错.

解决方案 »

  1.   

    void addnode(struct GG * gg)
    {
      struct MM * p1 = gg->head;
      for(int i = 0; i < 11 ; i ++)
      {
         struct MM * p2 = new struct MM;
         p1->next = p2;            
         p2->next = NULL;      //加这一句试试
         p1 = p2;
      }
    }
      

  2.   

    恩,变量是全局的,我在实际代码中也加了
    p2->next =NULL;
      

  3.   

    楼主传入addnode的实参是怎样的,估计是传入的参数有问题吧,有没有初始化一下
    struct MM * p1 = gg->head; 
    加上这句gg->head->next = NULL ;另外的p2->next = NULL ;也要加上
      

  4.   

    你调试下,看看delete对象那里的指针是类似未初始化的值吗?这是一种情况,
    另外,如果确实是你new得到的指针那么估计就是你在其他的代码里对那个节点的操作出现越界、溢出的问题了,也要检查下
      

  5.   

    void deletenode(strcut MM * mm)
    {
       if(mm!=NULL)
       {
           if(mm->next!=NULL)
             deletenode(mm->next);
           else
             delete mm;
       }

      

  6.   

    我测试了下,应该是没有问题的啊。
    如果是缺少这一句:p2->next = NULL;      //加这一句试试
    在if 里面就会出错。另外,楼主要说明白点,delete mm; 这句,会运行多次的,到底是第几次运行到这时才出的错。我怀疑是最后一次删除头节点的出错了,可能是因为你的头节点在定义的时候,并不是通过new为他动态申请了空间,结果导致删除出错。
    比如这里:struct MM * p1 = gg->head;如果p1是被作为了头节点,删除的时候可能就会出错。
      

  7.   

    void addnode(struct GG * gg)
    {
      struct MM * p1 = gg->head;
      for(int i = 0; i < 11 ; i ++)
      {
         struct MM * p2 = new struct MM;
         p1->next = p2;            
         p2->next = NULL;      //加这一句试试
         p1 = p2;
      }
    }
      

  8.   

    因为其中一个节点的next没有初始化为null,而且没有分配过内存,删除一个不能删除的指针出错,就是这样
    p2->next = NULL;      //加这一句试试,这样就可以了因为C++的编译器delete NULL不会出错,呵呵
      

  9.   

    补充一下,删除当前节点后,同时要更新父节点的next = NULL
    否则同样会出错
      

  10.   

    谢谢各位的支持了 ,由于本人的疏忽结贴时间有点晚了 ,原因找到了,我 的链表是在dll中生成的 ,所以也要有dll释放。
    再次谢谢各位,散分 。