释放堆内存后将指针设置为NULL

时间:2015-02-28 15:40:52

标签: c memory-management malloc free

我看到了一个简单的C程序:

//create a pointer to 3 bytes on heap
char *start = malloc(3);

*start = 'u';
*(start + 1) = 'v';
*(start + 2) = 'w';

printf("%s has %zu characters.\n", start, strlen(start));

// Free the memory so that it can be reused
free(start);
//Why we need to set start = NULL if we have already freed the memory above
start = NULL;

我理解除最后一行start = NULL;之外的所有内容,为什么我们需要将其设置为NULL?是仅仅使指针指向NULL而不是非感知内存空间?

start = NULL;是必须采取行动还是行动不错?

1 个答案:

答案 0 :(得分:1)

你问:

  

start = NULL;是必须采取行动还是行动不错?

虽然技术上并不需要,但NULL指针避免使用“悬空指针”(指向不再无效的内存指针)是一种很好的编程习惯。

如果start变量立即超出范围(即悬空指针将立即消失),则此值有限。但是,如果此start变量具有更广泛的范围,则最佳做法是NULL