我在 C 语言中有以下错误的代码段,我想知道是否会有内存泄漏,或者是否会有一个指向可用内存位置的指针。
int* p = (int*) malloc(sizeof(int));
p = NULL;
free(p);
是的,它会泄漏内存。在释放 p 指向的内容之前,将 p 分配给 NULL。一个快速更改将修复它:
int* p = malloc(sizeof(int));
free(p);
p = NULL;
这里的区别在于,我们在将 p 设置为 NULL 之前免费提供 malloc 分配的地址。通常,将指针设置为 NULL 不会释放内容,但可以让您检查指针是否有效,这可以有很多实际应用。
您将有内存泄漏。
将NULL
分配给p
后,您将无法再引用使用malloc
分配的内存。
你对free
的呼唤将试图释放NULL
,什么都不做。
以下内容将正确释放内存:
int *p = malloc(sizeof(int));
free(p);
p = NULL;
请注意,释放后不需要将p
设置为NULL
,您只需要前两行。