首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

一个小疑点

2012-03-20 
一个小问题看下面代码,疑问就在注释的地方C/C++ codetypedef struct Node{DataType1 datastruct Node *ne

一个小问题
看下面代码,疑问就在注释的地方

C/C++ code
typedef struct Node{    DataType1 data;    struct Node *next;}SLNode;void ListInitiate(SLNode **head){    *head = (SLNode *)malloc(sizeof(SLNode));    (*head)->next = NULL;}int ListLength(SLNode *head){    SLNode *p   = head;    int    size = 0;    while(p->next)    {        p = p->next;        size++;    }    return size;}int ListInsert(SLNode *head, int i, DataType1 x){    SLNode *p, *q;    int j;    p = head;    j = -1;    while(p->next && j < i - 1)    {        p = p->next;        j++;    }    if (j != i - 1)    {        cout<<"Link list insert argument is wrong!"<<endl;        return 0;    }    q = (SLNode *)malloc(sizeof(SLNode));    q->data = x;    q->next = p->next;    p->next = q;    return 1;}int ListDelete(SLNode *head, int i, DataType1 *x){    SLNode *p, *s;    int j;    p = head;    j = -1;    while(p->next && p->next->next && j < i - 1)    {        p = p->next;        j++;    }    if (j != i - 1)    {        cout<<"Link list delete argument is wrong!"<<endl;        return 0;    }    s = p->next;    *x = s->data;    p = p->next->next;    free(s);                        //这里我觉得应该加一句s = NULL;    return 1;    }int ListGet(SLNode *head, int i, DataType1 *x){    SLNode *p;    int j;    p = head;    j = -1;    while(p->next && j < i - 1)    {        p = p->next;        j++;    }    if (j != i - 1)    {        cout<<"Link list get argument is wrong!"<<endl;        return 0;    }    *x = p->data;    return 1;}void Destroy(SLNode **head){    SLNode *p, *q;    p = *head;    while(p)    {        q = p;        p = p->next;        free(q);               //这里我觉得应该再加一句q = NULL;    }     *head = NULL;}

其实就是在free()之后将指针置为NULL,代码来自书中,书中并没有在释放后将指针置为NULL,我想问下有无此必要

[解决办法]
因为free之后那个变量不再使用了,是一个局部变量,因此不需要设置为null
如果是全局变量之类的,设置为null是一个好习惯

热点排行