如果在释放内存之前将指针设置为NULL,会发生什么情况?

问题描述

从安全的角度来看,据说在释放内存之后将指针设置为NULL是一种好习惯。如果在释放内存之前将指针设置为NULL,会发生什么情况?这将如何导致漏洞?

解决方法

我认为您在释放内存后误解了将其设置为NULL的原因。您不想碰到不是您的记忆。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *a = malloc(sizeof(int));
    free(a);
    printf("%p",a);
    *a = 1;
    return 0;
}

我们释放了指针,但是它仍然指向相同的地址。我可以给它写信“没问题”。实际上,在这种情况下,您会陷入不确定的行为。

因此,如果您释放指针并在以后使用它,则表示您将遭受灾难。但是,如果将其设置为NULL,则将出现段错误。就像在这种情况下一样。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *a = malloc(sizeof(int));
    free(a);
    printf("%p",a);
    a = NULL;
    *a = 1;
    return 0;
}

因此,如果取消引用释放的指针,至少可以在测试应用程序时确定地了解它。

现在,如果在释放内存之前将其设置为NULL,则只会泄漏内存。还是不好。

,

如果在释放内存之前将指针设置为NULL,会发生什么?

如果您尝试释放空指针,将不会发生任何事情。

如果还有其他指向同一内存的指针,则它们可以继续用于引用并最终释放内存。

如果这是指向该内存的唯一指针,则无法再次引用该内存。该过程将保留在内存中,直到退出。这是“内存泄漏”。

内存泄漏的进程将使用越来越多的内存。泄漏非常普遍,以至于长时间运行的进程,甚至习惯于每天重启整个服务器。