malloc 中的内存泄漏?

memory leak in malloc?

我在 C 中得到了以下错误代码,我想知道是否会发生内存泄漏,或者是否会有一个指向空闲内存位置的指针。

int* p = (int*) malloc(sizeof(int));
p = NULL;
free(p);

你会发生内存泄漏。

NULL 分配给 p 后,您将无法再引用使用 malloc 分配的内存。

您对 free 的调用将尝试释放 NULL,什么都不做。

以下将正确释放内存:

int *p = malloc(sizeof(int));
free(p);
p = NULL;

注意释放后不需要将p设置为NULL,只需要前两行。

是的,它会泄漏内存。在释放它指向的内容之前,您将 p 分配给 NULL。一项快速更改即可解决问题:

int* p = malloc(sizeof(int));
free(p);
p = NULL;

这里的区别是我们在设置p为NULL之前释放了malloc分配的地址。一般情况下,将指针设置为NULL不会释放内容,但可以让你检查指针是否有效,有很多实际应用。