一个小问题
看下面代码,疑问就在注释的地方
- 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是一个好习惯