注册 登录
编程论坛 C++教室

内存报错问题,是否有一个节点是空的啊

紫夜使然 发布于 2012-09-30 09:08, 246 次点击
#include"stdio.h"
#include "malloc.h"
#include "stdlib.h"
#define ok 1
#define NULL 0
typedef    int Status;
typedef   int Elemtype;
typedef struct lnode{

    Elemtype a;
    struct lnode *next;
}lnode;

lnode *creat(void)
{
    lnode *head ,*p;
    head=(lnode *)malloc(sizeof(lnode));
    p=head;
    p->next=(lnode *)malloc(sizeof(lnode));
    p->a=2;
    p=p->next;
    p->next=(lnode *)malloc(sizeof(lnode));
    p->a=4;
    p=p->next;
    p->next=(lnode *)malloc(sizeof(lnode));
    p->a=31;
    p->next=NULL;
    return head;
}

//********************

Status destory (lnode *l){

    lnode *p=l,*q=l->next;

    for( ;p!=NULL; q=q->next)
    {
       free(p);
       p=q;
    }
    return ok;
}



void  show(lnode *head)                  //s1:接收头结点
{                                      
   lnode *p;                             //s2:定义一个指针
   p=head;                               //s3:将头结点传给指针p
   for(;p;p=p->next)                     //s4:判断节点是否为空,节点下移
   printf("%d    ",p->a);              //s5:输出节点内容
}





void main()
{
   
    lnode *head;
    head=creat();
   

    show(head);
    destory(head);
}

内存报错是什么原因啊?帮解决下,谢谢啦!
2 回复
#2
lz10919149992012-09-30 10:31
p->next=(lnode *)malloc(sizeof(lnode)); // 下面你又把这个节点置为NULL,不就造成内存泄露了吗?这句应该删掉。
p->a=31;
p->next=NULL;

for( ;p!=NULL; /* 当q=0时,q=q->next就出现空指针错误了 */)
{
    q=q->next; // 改到这来就正确了。
    free(p);
    p=q;
}
#3
pangding2012-10-01 10:14
lz 版主v5。
1