Rick

作者评论

回复:4. 释放内存两次

为了扩展此技巧,在调用 free() 将内存释放回堆之后,应立即将指针设置为 NULL。

不将指针设置为 NULL 会导致两个潜在的问题

1) 在同一地址上调用 free() 两次,导致堆损坏。

2) 取消引用指向已释放内存的指针,该内存可能正在被程序的其他部分使用,可能会损坏数据或检索到不正确的数据。

解决方案很简单;

要么总是

//...
free(array);
array = NULL;
//...

许多程序员忘记这样做,或者更好的是

void *free2(void *ptr) // 或其他名称
{
free(ptr);
return NULL;
}

并始终如一地使用新函数,如

array = free2(array);

这可以解决上述两个问题。

取消引用 NULL 指针应导致分段错误,表明指针存在问题,并且对 NULL 指针调用 free() 无效。

在“循环直到我猜出随机数”部分中,我将使用 while 循环而不是 do-while 循环来编写循环代码。人们普遍认为,如果可能的话,应避免使用 do-while 循环,我对此表示赞同。 C++ 也是如此!

© . All rights reserved.