malloc内存泄漏?

malloc内存泄漏?,c,memory-management,memory-leaks,malloc,C,Memory Management,Memory Leaks,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设置为NU

我有以下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
,实际上只需要前两行。

您将出现内存泄漏

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

您对
free
的调用将尝试释放
NULL
,而不执行任何操作

以下操作将正确释放内存:

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

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

是,它将泄漏内存。在释放p指向的内容之前,将p指定为NULL。一个快速的改变就能解决它:

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

这里的区别是我们在将p设置为NULL之前释放malloc分配的地址。通常,将指针设置为NULL不会释放内容,但允许您检查指针是否有效,这可能有很多实际应用。

是,它会泄漏内存。在释放p指向的内容之前,将p指定为NULL。一个快速的改变就能解决它:

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

这里的区别是我们在将p设置为NULL之前释放malloc分配的地址。通常,将指针设置为NULL不会释放内容,但会允许您检查指针是否有效,这可能有很多实际应用。

这确实会导致内存泄漏
p
不再指向分配的内存块(其他任何内容也不指向),因此无法释放它。您从未释放它,因此会泄漏它。不过,这与malloc无关。您也不需要强制转换
malloc
。这确实会导致内存泄漏
p
不再指向分配的内存块(其他任何内容也不指向),因此无法释放它。您从未释放它,因此会泄漏它。不过,这与malloc无关。您也不需要强制转换
malloc
。您不需要强制转换
malloc
,这是C。我只是复制了他们的代码。我会做一些其他清理并删除它。你不需要强制转换malloc,这是C。我只是复制了他们的代码。我会做一些其他的清理并移除它。