c - 如何在 c 中使用 free() 函数?

标签 c memory error-handling free

我在我的程序中使用这个函数:

static void free_envp(char **envp)
{
    free(envp);
}

无论在线还是在手册页中,我都不知道应该如何管理错误以及可能发生哪些错误。

有人知道我在使用它时应该注意什么吗?

最佳答案

free 函数被调用以释放已在堆上分配的内存。即通过 malloccallocrealloc

您应该将 malloc 返回的指针传递给 free 函数。由于在某些情况下 malloc 可以返回 NULL,因此将 NULL 作为参数传递给 free 是安全的,所以 free(NULL) 什么都不做。

此外,对于每个 malloc,您应该只调用一次 free 函数。在尚未分配或已释放的指针上调用 free 是未定义的行为。

出于这个原因,如果您要再次使用它,在它被释放后将指针设置为 NULL 可能是个好主意。

int *p;
p = malloc(n * sizeof(int));  // n is size of the array
if (p == NULL)
{
    // Take appropriate action, e.g. exit the program.
}
....
.....

// After all use of the memory is over, if allocated properly before.
free(p);
p = NULL;

关于c - 如何在 c 中使用 free() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53204010/

相关文章:

c - 如何从 C 中的目录中检索文件名和子目录名?

c - 更改数组中变量的指针

c# - 如何通过EnterpriseLibrary以编程方式读取错误日志?

c++ - 如何将数据从一个结构链接到另一个结构

c - 增加扑克牌的值(value) - 使用指针和结构

memory - Clojure 惯用的内存高效循环

node.js - 检查node.js中分配的最大内存大小

c - 更新 C 库,导致堆损坏

python - 为什么会出现这个属性错误呢?

python - 如何处理for循环中跳过的项目