如何在释放循环链表时将指针设置为null

时间:2016-12-31 23:12:55

标签: c data-structures

 node* curr = top;
  do {
    free(curr); //free saved pointer
    curr = curr->next; //advance head to next element
  } while (curr!=top);

当释放如上所述的循环链表的内存时,如何将每个指针设置为空?

2 个答案:

答案 0 :(得分:3)

由于您无论如何都要释放节点,因此无需重置节点中包含的指针。

根据您出现的代码的上下文,可能需要在结尾处设置top = NULL。可以说,无论如何,这是一个很好的做法。

在某种程度上相关的说明中,您的代码中存在错误:curr = curr->next取消引用已解除分配的指针并生成undefined behaviour。解决这个问题的一种方法是:

node* curr = top;
node* next;
do {
  next = curr->next;
  free(curr);
  curr = next;
} while (curr!=top);

另请注意,您的代码无法正确处理释放空列表。修复这个问题留给读者练习。

答案 1 :(得分:0)

要使指针 null 指针将常量零转换为与指针数据类型相同的数据类型:

var express = require('express');
var router = express.Router();

var youtubeStream = require('youtube-audio-stream');

router.get('/stream/:videoId', function (req, res) {
    try {
        youtubeStream(req.params.videoId).pipe(res);
    } catch (exception) {
        res.status(500).send(exception)
    }
});