读书人

一个小疑点

发布时间: 2012-03-20 14:01:11 作者: rapoo

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

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是一个好习惯

读书人网 >软件架构设计

热点推荐